1,IO流用来处理设备之间的数据传输,java对数据的操作是通过流的方式;
2,IO流按操作数据分为:字节流(基类:InputStream,OutputStream);字符流(基类:Reader,Writer)
按流向分为:输入流,输出流;
3,有四个类派生出来的子类名称都是以其父类名作为子类名的后缀;
4,字符流
(Writer):
FileWriter(用于操作文件的Writer子类对象)
(1)创建一个FileWriter对象,对象一初始化就明确被操作的文件,而且该文件会创建到该指定目录下,如果已有同名文件,则会覆盖;
(2)调用write方法,将字符串写入流中;
(3)刷新流对象中的缓冲的数据,刷到目的地中,flush();
(4)关闭流资源,close();
(5)如对已有文件续写,传递一个true参数(file,true),在已有文件末尾续写;
5,Reader:
FileReader(用于操作文件的Reader子类对象)
(1)创建一个已经存在的文件读取流对象,如不存在,会发生FileNotFoundException;
(2)调用读取流的方法,read(),通过字符数组来读取;
(3)关闭资源,close();
6,缓冲区(为了提高流的操作效率)
BuffferdWriter
(1)创建一个字符写入流对象;
(2)加入缓冲技术,把流对象作为参数传递给缓冲区的构造函数;
(3)刷新;
(4)关闭;
(5)跨平台性的换行符:newLine();
BufferedReader
(1)创建一个读取流对象和文件相关联;
(2)加入缓冲技术;
(3)读一行 : readLine( ),readLine方法只返回回车符之前的数据内容,并不返回回车符,所以用newLine进行换行;
7,装饰设计模式:对已有对象进行功能增强时,可以定义类将已有对象传入,基于已有的功能并提供加强功能;
装饰类:通常通过构造方法接受被装饰的对象,并基于被装饰的对象的功能,提供更强的功能;
装饰设计模式比继承灵活,避免了继承体系臃肿,而且降低了类和类之间的关系;
LineNumberReader(缓冲字符输入流,跟踪行号):有readLine方法,编号从0开始;
setLineNumber:设置当前行号;getLineNumber:获取当前行号;
8,字节流
OutputStream输出流(写):
InputStream输入流(读):
FileOutputStream(用于操作文件的OutputStream子类对象)
FileInputStream(用于操作文件的InputStream子类对象)
读取方法:通过数组,通过avaiable(个数);
9,转换流:
将字节流对象转成字符流:InputStreamReader
将字符流转成字节流:OutputStreamWriter
键盘录入: 获取键盘录入对象 InputStream in = System.in ;
BufferedReader bufr = new BufferedReader( new InputStreamReader(System.in));
系统输出: OutputStream out = System.out ;
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out) );
10,流操作的基本规律
(1)明确源和目的:
源:输入流,InputStream,Reader
目的:输出流,OutputStream,Writer
(2)数据是不是纯文本
是:字符流
不是:字节流
(3)体系明确后,通过设备区分使用哪个具体的对象
源设备:内存(ArrayInputStream,ArrayReader),硬盘(FileInputStream,FileReader),键盘(System.in)
目的设备:内存(ArrayOutputStream,ArrayWriter),硬盘(FileOutputStream,FileWriter),控制台(System.out)