A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

今天学习FileReader和FileWriter。

FileReader是用于读取字符流的类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的。要自己指定这些值,可以先在FileInputStream上构造一个InputStreamReader。要读取原始字节流,请考虑使用FileInputStream。在使用时一般使用BufferedReader来包装此类。

FileWriter是用于写入字符流的类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的。要自己指定这些值,可以先在FileOutputStream上构造一个OutputStreamWriter。要写入原始字节流,请考虑使用FileOutputStream。在使用时一般使用BufferedWriter来包装此类。

FileReader

先来看下FileReader的源码

public class FileReader extends InputStreamReader {   /**    * 在给定从中读取数据的文件名的情况下创建一个新FileReader。    */    public FileReader(String fileName) throws FileNotFoundException {        super(new FileInputStream(fileName));    }   /**    * 在给定从中读取数据的File的情况下创建一个新FileReader。    */    public FileReader(File file) throws FileNotFoundException {        super(new FileInputStream(file));    }   /**    * 在给定从中读取数据的FileDescriptor的情况下创建一个新FileReader。    */    public FileReader(FileDescriptor fd) {        super(new FileInputStream(fd));    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

从代码中可以看到,FileReader本质是通过传入的文件名、文件、或者文件描述符来创建FileInputStream,然后以FileInputStream为参数构造InputStreamReader。功能的实现是通过InputStreamReader完成的。

FileWriter

先来看下FileWriter的源码。

public class FileWriter extends OutputStreamWriter {    /**     * 根据给定的文件名构造一个FileWriter对象。     */    public FileWriter(String fileName) throws IOException {        super(new FileOutputStream(fileName));    }    /**     * 根据给定的文件名以及指示是否附加写入数据的boolean值来构造FileWriter对象。     * 如果第二个参数为true,则将字节写入文件末尾处,而不是写入文件开始处。     */    public FileWriter(String fileName, boolean append) throws IOException {        super(new FileOutputStream(fileName, append));    }    /**     * 根据给定的File对象构造一个FileWriter对象。     */    public FileWriter(File file) throws IOException {        super(new FileOutputStream(file));    }    /**     * 根据给定的File对象以及指示是否附加写入数据的boolean值构造一个FileWriter对象。     * 如果第二个参数为true,则将字节写入文件末尾处,而不是写入文件开始处。     */    public FileWriter(File file, boolean append) throws IOException {        super(new FileOutputStream(file, append));    }    /**     * 构造与某个文件描述符相关联的FileWriter对象。     */    public FileWriter(FileDescriptor fd) {        super(new FileOutputStream(fd));    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

使用案例可以参考Java8 I/O源码-InputStreamReader与OutputStreamWriter中的demo,非常相似。

总结
  • FileReader是用于读取字符流的类。

    • 此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的。要自己指定这些值,可以先在FileInputStream上构造一个InputStreamReader。要读取原始字节流,请考虑使用FileInputStream。
    • 在使用时一般使用BufferedReader来包装此类。
  • FileWriter是用于写入字符流的类。

    • 此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的。要自己指定这些值,可以先在FileOutputStream上构造一个OutputStreamWriter。要写入原始字节流,请考虑使用FileOutputStream。
    • 在使用时一般使用BufferedWriter来包装此类。

关于FileReader和FileWriter就讲到这里,想了解更多内容请参考

版权声明


1 个回复

倒序浏览

很不错,受教了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马