程序员潇然 发表于 2022-8-26 12:54:18

JavaIO之FileReader 和 FileWriter(十九)

### 简介

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他们的构造方法

!(data/attachment/forum/202208/26/125309ziuyn2lnzrnn2fbx.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")



很清楚的看得出来
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装饰

!(data/attachment/forum/202208/26/125339kwxk1eybp4yxkewb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")

### 总结

!(data/attachment/forum/202208/26/125353fswfzyafvgh6hy9y.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "image.png")


FileReader 和 FileWriter继承了InputStreamReader 和OutputStreamWriter
他们本身就是InputStreamReader 或者OutputStreamWriter
他们只是new   InputStreamReader 或者OutputStreamWriter的简化形式
使用这两个类,只需要清楚他们的构造方法即可
想要深入理解,可以在翻看下InputStreamReader 和OutputStreamWriter的介绍

!(data/attachment/forum/202206/16/141330jha7st9soow8772i.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/300 "common_log.png")
`转载务必注明出处:程序员潇然,疯狂的字节X,https://crazybytex.com/thread-155-1-1.html `
页: [1]
查看完整版本: JavaIO之FileReader 和 FileWriter(十九)