------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
API包: Java.io.*
缘来:
java通过操作数据对象是通过流的方式来创建的
作用:
IO流就是用来设备之间的数据传输
流按照数据分为两种流:字符流,字节流
按照输入方式分为:输入流。和输出流。
一、常用的两个基类:
字节流抽象基类 | InputStream,OutputStream |
字符流抽象基类 | Reader, Writer. |
注意:由上面四个类派生出来的子类,都用父类作为后缀来命名类名;
二、开始操作:我们用读写文件来来演练:
思路:1.如果要写数据,总得要知道写在哪里吧?
FileWriter fw= new FileWriter("写入地址");
2.找到地址我们就开始写了
fw.write(“数据内容”);//注意这里我们才写到流里面
3.我们要刷新一下,把他写入指定的文件当中。
fw.flush();//刷新
fw.close(); //关闭流对象 ,
注意:Close()每次关闭会调用一次flush()方法;
那么:文件的读取就会和写入相反嘛;
FileReader fr = new FileReader(“读取位置”);
fr.read(“读取到缓冲区当中。一般可以用”);//读取数据
fr.colee();//关闭读取流
我们看看在硬盘上的处理方式。
- 异常处理方式:
//创建流对象 FileWriter fw=null; try { //创建数据写入的目的地。 fw= new FileWriter("zhulang.txt"); //那么开始写了 fw.write("你好我是小帅哥"); } catch (IOException e) { System.out.println("输出IO异常"+e.toString()); } finally { try { if (fw!= null) { //如果文件不存在;异常 fw.close(); } } catch (IOException e2) { System.out.println("异常"+e2.toString()); } }
优化:上面的做法总觉得不是很好。读写速度就很慢。Java给我们提供了缓冲区的方法
出现的原因:那么就是为了提高流的读写效率。Buffered类
那么我们可以推导出我们在创建缓冲区的时候我们是不是就要创建流对象。
ReadLine()原理: 无论是读取一行。获取多个字符,最终得原理都是在硬盘上面一个个的读取,最终还是使用的还是read()方法,一次次的读取。只是在缓冲区当中增加了特别的终止符:
那么来看看我自己手写的ReadLine
/** *手写RradLine */ class MyBufferedReader { FileReader fr = null; //自己手写ReanLine public MyBufferedReader(FileReader fr) { this.fr= fr; } public String myReadLine() throws IOException { //创建一个字符串,用于接受返回 StringBuffer stub = new StringBuffer(); //那么开始一个一个的读取 int ch = 0; while ((ch=fr.read())!=-1) { if (ch=='\r') continue; if (ch=='\n') return stub.toString(); else stub.append((char)ch); } return null; } }