首页 > 代码库 > FileWriter学习

FileWriter学习


FileWriter 文件输出流是用于将数据写入 FileFileDescriptor 的输出流。文件是否可用或能否可以被创建取决于基础平台。特别是某些平台一次只允许一个FileOutputStream(或其他文件写入对象)打开文件进行写入。在这种情况下,如果所涉及的文件已经打开,则此类中的构造方法将失败。

FileOutputStream 用于写入诸如图像数据之类的原始字节的流。要写入字符流,请考虑使用 FileWriter


共有五个构造方法

  • FileWriter(File file)  根据给定的 File 对象构造一个 FileWriter 对象。
  • FileWriter(File file, boolean append)  根据给定的 File 对象构造一个 FileWriter 对象。
  • FileWriter(String fileName)  根据给定的文件名构造一个 FileWriter 对象。
  • FileWriter(String fileName, boolean append)  根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。
  • FileWriter(FileDescriptor fd)  构造与某个文件描述符相关联的 FileWriter 对象。

其中方法可以分为三组,入参带File的为一组,入参带String 的为一组,这两组方法基本相似。


带File 的构造方法是直接传入文件来构造FileWriter对象,而带String 的构造方法,则必须先通过new File(String path) 来构造File 文件,再来构造FileWriter对象。

查看java源码

    /**
     * Constructs a FileWriter object given a file name.
     *
     * @param fileName  String The system-dependent filename.
     * @throws IOException  if the named file exists but is a directory rather
     *                  than a regular file, does not exist but cannot be
     *                  created, or cannot be opened for any other reason
     */
    public FileWriter(String fileName) throws IOException {
        super(new FileOutputStream(fileName));
    }

    /**
     * Constructs a FileWriter object given a File object.
     *
     * @param file  a File object to write to.
     * @throws IOException  if the file exists but is a directory rather than
     *                  a regular file, does not exist but cannot be created,
     *                  or cannot be opened for any other reason
     */
    public FileWriter(File file) throws IOException {
        super(new FileOutputStream(file));
    }

跟踪FileOutputStream 源码查看FileOutputStream 的构造方法

    /**
     * 创建一个向具有指定名称的文件中写入数据的输出文件流
     * 省略大段注释 
     */ 
    public FileOutputStream(String name) throws FileNotFoundException { 
        this(name != null ? new File(name) : null, false); 
    } 

     /** 
      * 创建一个向指定<code>File</code> 对象表示的文件中写入数据的文件输出流
      * 省略大段注释 
      */ 
     public FileOutputStream(File file) throws FileNotFoundException { 
         this(file, false);
     }

给定File file做入参的方法和给定String name 做入参的方法区别就在于给name的方法,在调用默认的构造方法前,先判断name是否为空,非空时构造File 对象出来。

再看 File file 入参的两个方法,FileWriter(File file)  和 FileWriter(File file, boolean append) 的区别在于后面多了一个boolean append 参数

boolean append 的作用是什么呢?查看

    /**
     * 省略大段注释
     * @param      file               the file to be opened for writing.
     * @param     append      if true , then bytes will be written
     *                   to the end of the file rather than the beginning
     */
    public FileOutputStream(File file, boolean append)
        throws FileNotFoundException
    {
        //  省略大段代码
    }
append  如果为 true,则将字节写入文件末尾处,而不是写入文件开始处

append 相当于指定了写入的方式,是覆盖写还是追加写

append 为true时,追加写,相当于Linux 里面的 >> 操作符;append 为false时,覆盖写,相当于Linux 里面的 > 操作符。


FileWriter(FileDescriptor fd)  类,暂未用过,这里就不细谈了。



FileWriter学习