「布衣码农」FileReader FileWriter 只是个包装简化形式。


 1 

原理

FileReader FileWriter 都是提供操作文件的便捷类,这两个类的实现非常的简单。回忆下之前的转换流:InputStreamReader和OutputStreamWriter。
InputStreamReader是转换流,字节通往字符的桥梁;OutputStreamWriter是转换流,字符通向字节的桥梁;
他们是适配器模式:InputStreamReader目标是Reader;OutputStreamWriter目标是Writer;InputStreamReader接受一个InputStream;OutputStreamWriter 接受一个OutputStream;
然后将他们用起来像是Reader或者Writer。
再想一下FileInputStream和FileOutputStream:
FileInputStream 是InputStream;
FileOutputStream是OutputStream;
FileInputStream和FileOutputStream 又可以通过File、String路径名或者文件描述符构造
所以,如果想要对文件进行字符操作,你肯定想得到下面的方式:

new InputStreamReader(new FileInputStream(File/String/FileDescriptor)  );
现在,看下FileReader 和  FileWriter他们的构造方法




很清楚的看得出来:FileReader 和  FileWriter所有的构造方法都是做了一件事情:那就是调用 InputStreamReader   和 OutputStreamWriter的构造方法。


也就是:

new InputStreamReader(new FileInputStream(File/String/FileDescriptor)  )

或者

new OutputStreamWriter(new FileOutputStream(File / String /fd));


因为他们是InputStreamReader 和 OutStreamWriter的子类,所以用的是super调用。



另外是否还记得InputStreamReader 以及OutputStreamWriter的构造方法么?
他们还能够设置字符,但是FileReader和FileWriter却没有,显然,他们是简化版的形式。


他们总是假定默认字符编码和默认字节缓冲区大小都是适当的。


所以如果有必要的情况下
你应该自己去创建InputStreamReader 以及OutputStreamWriter的对象并且指定编码而且还可以增加缓冲,BufferXXX装饰。


 2 

小结


FileReader 和 FileWriter继承了InputStreamReader 和OutputStreamWriter,他们本身就是InputStreamReader 或者OutputStreamWriter。


他们只是:

new   InputStreamReader 或者OutputStreamWriter的简化形式

使用这两个类,只需要清楚他们的构造方法即可。


想要深入理解,可以重新在翻看下InputStreamReader 和OutputStreamWriter的介绍。

https://mp.weixin.qq.com/s/SHsPjjvYqBvli_p1GDNpLQ