一、IO流概念
1、IO流用来处理设备之间的数据传输
2、Java对数据的操作是通过流的方式
3、Java用于操作流的对象都在IO包中
4、流按流向分为两种:输入流,输出流。
5、流按操作类型分为两种:字节流与字符流。字节流可以操作任何数据,字符流只能操作纯字符数据,比较方 便。
二、IO流常用基类
1、字节流的抽象基类:
InputStream ,OutputStream
2、字符流的抽象基类:
Reader , Writer
3、由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀。
如:InputStream的子类FileInputStream。
如:Reader的子类FileReader。
注意: InputStreamReader 是字符流, 可以从字节流中读取字符
三、IO程序书写
使用前,导入IO包中的类
使用时,进行IO异常处理
使用后,释放资源
四、字符流读写文件
1、读取文件
a、定义字符流关联指定文件
FileReader reader = new FileReader("Test.txt");
b、读取一个字符,返回int,该字符的码表值
int ch = reader.read();
c、关闭流,释放资源
reader.close();
2、写出文件
a、定义字符输出流关联指定文件
FileWriter writer = new FileWriter("Test.txt");
b、写出一个字符,接收int码表值
writer.write(97);
c、关闭流,释放资源
writer.close();
3、注意事项
a、文件路径
定义文件路径时Windows中的目录符号为“\”,但这个符号在Java中是特殊字符,需要转义。
可以用“\\”或“/”表示。
b、读取文件
读取文件时必须保证文件存在,否则将抛出FileNotFoundException。
c、写出文件
写出时文件如不存在时程序会创建新文件,如文件已存在则会清空原文件内容重新写入。
如需追加内容可调用FileWriter构造函数FileWriter(String fileName, boolean append)
五、字符流缓冲区读写
1、自定义缓冲区读写
a、为什么定义缓冲区
由于单个字符读写需要频繁操作文件,所以效率非常低。
我们可以定义缓冲区将要读取或写出的数据缓存,减少操作文件次数。
b、缓冲区读取
先定义一个数组,然后调用FileReader读取一个数组的方法。
int read(char[] cbuf)
c、缓冲区写出
将要写出的数据存放在数组中,调用FileWriter方法,一次写出一个数组。
void write(char[] cbuf, int off, int len)
2、内置缓冲区的BufferedReader和BufferedWriter
a、Java提供了带缓冲功能的Reader和Writer类:BufferedReader,BufferedWriter
b、这两个类都是提供包装功能,需要提供其他流来使用,给其他流增加缓冲功能
c、当我们调用BufferedReader读取数据时,程序会从文件中一次读取8192个字符用来缓冲
d、当我们调用BufferedWriter写出数据时,程序会先将数据写出到缓冲数组,直到写满8192个才一次性刷出到文件
六、装饰设计模式(Decorator)
1、什么情况下使用装饰设计模式
当我们需要对一个类的功能进行改进、增强的时候。
2、装饰模式的基本格式。
a、含有被装饰类的引用
b、通过构造函数传入被装饰类对象
c、和被装饰类含有同样的方法,其中调用被装饰类的方法,对其进行改进、增强
d、和被装饰类继承同一个类或实现同一个接口,可以当做被装饰类来使用
3、了解BufferedReader、BufferedWriter的原理。
BufferedReader、BufferedWriter都是装饰类,他们可以装饰一个Reader或Writer,给被装饰的Reader和Writer提供缓冲的功能。
就像我们用BufferedReader、BufferedWriter装饰FileReader和FileWriter,使用的读写功能还是FileReader和FileWriter的,但给这两个类的读写添加了缓冲功能。
七、字节流
1、基本操作与字符流相同
2、字节流可以操作任意类型数据
八、字节流缓冲区读写
1、自定义缓冲区读写
a、原理和字符流相同,都是为了提高效率
b、定义数组缓冲数据,一次读取一个数组,一次写出一个数组,减少操作文件的次数
2、BufferedInputStream、BufferedOutputStream
a、和BufferedReader、BufferedWriter原理相同,都是包装类
b、BufferedInputStream、BufferedOutputStream包装InputStream和OutputStream提供缓冲功能
九、转换流
1、字符流与字节流之间的桥梁
2、方便了字符流与字节流之间的操作
3、字节流中的数据都是字符时,转成字符流操作更高效
十、标准输入输出流
1、System类中的成员变量:in,out。
2、它们各代表了系统标准的输入和输出设备。
3、默认输入设备是键盘,输出设备是显示器。
4、System.in的类型是InputStream.
5、System.out的类型是PrintStream是OutputStream的子类FilterOutputStream 的子类.
十一、流基本应用小结
总结:在边学的时候,边写代码练习,很快就熟练了。经常同样的代码反复的敲几遍,温故而知新。