Java8 I/O源码-FileReader和FileWriter

今天学习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));
    }

}

从代码中可以看到,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));
    }

}

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

总结

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

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

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

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

  • Java8 I/O源码系列专栏-目录
  • Java8 I/O源码-InputStreamReader与OutputStreamWriter
版权声明
作者:潘威威

原文地址:CSDN博客-潘威威的博客-http://blog.csdn.net/panweiwei1994/article/details/78370341

本文版权归作者所有,欢迎转载。转载时请在文章明显位置给出原文作者名字(潘威威)及原文链接。请勿将本文用于任何商业用途。

你可能感兴趣的:(Java8-IO,Java8,I/O源码札记)