1.Reader
a.简介
i.是Java的IO库提供的另一种输入流。和InputStream的区别是:InputStream是字节流,以byte为单位,Reader是字符流,以char为单位。
ii.java.io.Reader是所有字符输入流的超类。
b.FileReader
i.FileReader默认的编码与系统相关,创建时需要指定编码,Windows系统的默认编码可能是GBK,打开一个UTF-8编码的文本文件出现乱码。
ii.int read(char[] c)一次性读取若干字符并填充到char[]数组,返回实际读入的字符个数,最大不超过char[]数组的长度,返回-1表示流结束。
c.CharArrayReader
i.可以在内存中模拟一个Reader,实际作用是把char[]数组变成一个Reader。
d.StringReader
i.可以直接把String作为数据源,和CharArrayReader几乎一样。
e.InputStreamReader
i.除了特殊的CharArrayReader和StringReader,普通的Reader实际上是基于InputStream构造的,因为Reader需要从InputStream中读取字节流(byte),然后根据编码设置,再转换成char就可以实现字符流。
ii.Reader本质上是一个基于InputStream的byte到char的转换器,InputStreamReader转换器可以把任何InputStream转换成Reader。
2.Writer
a.简介
i.带编码转换器的OutputStream,把char转换成byte并输出。
ii.java.io.Writer是所有字符输出流的超类。
b.FileWriter
i.向文件中写入字符流的Writer。
c.CharArrayWriter
i.在内存中创建一个Writer,实际上是构造一个缓冲区,可以写入char,最后得到写入的char[]。
d.StringWriter
i.也是一个基于内存的Writer,和CharArrayWriter类似。实际上,内部维护了一个StringBuffer,并对外提供了Writer接口。
e.OutputStreamWriter
i.除了特殊的CharArrayWriter和StringWriter,普通的Writer实际上是基于OutputStream构造的,接收char,然后在内部自动转换成byte,并写入OutputStream。
ii.Writer本质上是一个基于OutputStream的char到byte的转换器,OutputStreamWriter转换器可以把任何OutputStream转换成Writer。
3.PrintStream和PrintWriter
a.PrintStream
i.是一种FilterOutputStream,提供写入各种数据类型的方法。
ii.System.out:系统默认提供的标准输出流。System.err:系统默认提供的标准错误输出流。
iii.可以打印各种数据类型,不会抛出IOException,编写代码时,不需要捕捉IOException。
b.PrintWriter
i.PrintStream最终输出的总是byte数据,而PrintWrite则是扩展了Writer接口,它的print()/println()最终输出的是char数据。
4.Files
a.读写小文件的工具类,读取大文件仍然要使用文件流。
b.Files是java.nio包里的,封装了很多读写方法。