------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ---------
IO流用来处理设备之间的数据传输
java对数据的操作是通过流的方式
Java用于操作流的对象都在io包中
liu按照操作数据类型分为两种:字节流于字符流
流按流向分为:输出流,输入流
字节流的抽象基类 InputStream OutputStream
字符流的抽象基类:Reader Writer
先学习一下字符流的特点.
既然io流是用于操作数据的,那么数据最常见的体现形式是:文件
需求:在硬盘上创建一个文件并写入一些数据.
找到一个专门用于操作文件的Writer的子类对象.FileWriter.后缀名是父类名,前缀名是该流对象的功能
FileWriter fw = new FileWriter("文件名",true);
传递一个true的参数,表示不覆盖已有的文件,并在已有文件的末尾处进行数据续写
换行操作符: \r\n
文件读取流:
定义一个字符数组,用于存储到字符
方法read(char[])返回的是读到的字符个数
读取流的另一种读取文件的方法:
char[] buf = new char[1024];
int len = 0;
while((len=fw.read(buf))!=-1)
String str = new String(buf,0,len);
字符流缓冲区:
缓冲区的出现提高了对数据的读写效率
对应的类: BuffferWriter BufferReader
缓冲区要结合流才可以使用.
在流的基础上对流的功能进行了增强
缓冲区的出现是为了提高流的操作效率而出现的.所以在创建流对象之前,必须要有流对象
bufw.newLine()缓冲区特有的换行操作
字符读取流缓冲区:
该缓冲区提供了一个一次读一行的方法readLine,方便于对文本数据的获取.
当返回null时,表示读取到文件末尾
String line = null;
while((line=bufr.readLine())!=null)
System.out.println(line);
readLine方法返回的时候只返回回车符之前的数据内容,并不返回回车符
所以在读取一行之后应该执行换行(bufr.newLine())和刷新(bufr.flush())动作
装饰设计模式
当想要对已有的对象进行功能的增强时,可以定义类,将已有对象传入,基于已有的功能,并提供加强功能.那么自定义的该类称为装饰类
装饰类通常会通过构造方法接受被装饰的对象.并基于被装饰的对象功能,提供更强的功能
装饰模式比继承要灵活,避免了继承体系的臃肿,而且降低了类与类之间的关系
装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强功能
所以装饰类和被装饰类通常是属于一个体系中的
LineNumberReader:跟踪行号的缓冲字符输入流
FileReader fw = new FileReader("Demo.txt");
LineNumberReader lnr = new LineNumberReader(fw);
String line = null;
while((line=inr.readLine()))
System.out.println(inr.getLineNumber()+"::"+line);
inr.close();
读取键盘录入:
System.out:对应的是标准的输出设备:控制台
System.in:对应的是标准的输入设备:键盘
流操作的基本规律
通过三个明确来完成:
1.明确源和目的.
源: 输入流 InputStream Reader
目的: 输出流 OutputStream Writer
2.操作数据是否是纯文本
是: 字符流
不是: 字节流
3.当体系明确后,在明确要使用那个具体的对象
通过设备来进行区分:
源设备:内存,硬盘,键盘
目的设备:内存,硬盘,控制台
例如:将一个文本文件中的数据存储到另一个文件中,复制文件.
源:因为是源,所以使用读取流.InputStream, Reader
是不是操作文本文件
是:所以选择Reader, 这样体系就明确啦!
接下来明确要使用该体系中的那个对象.
明确设备:硬盘,上一个文件
Reader体系中可以操作文件的对象是FileReader
是否提高效率:是,加入Reader体系中的缓冲区,BufferedReader
目的:
是否是纯文本
是:Writer
设备:硬盘,一个文件
Writer体系中可以操作文件的对象是FileWriter
是否提高效率:是,加入Writer体系中的缓冲区,BufferedWriter