Java FileWriter类

FileWriter是文件字符输出流,主要用于将字符写入到指定的打开的文件中,其本质是通过传入的文件名、文件、或者文件描述符来创建FileOutputStream,然后使用OutputStreamWriter使用默认编码将FileOutputStream转换成Writer(这个Writer就是FileWriter)。

构造函数

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

方法

Writer append(char c) 将指定字符添加到此 writer。
Writer append(CharSequence csq) 将指定字符序列添加到此 writer。
Writer append(CharSequence csq, int start, int end) 将指定字符序列的子序列添加到此 writer.Appendable。
abstract  void close() 关闭此流,但要先刷新它。
abstract  void flush() 刷新该流的缓冲。
void write(char[] cbuf) 写入字符数组。
abstract  void write(char[] cbuf, int off, int len) 写入字符数组的某一部分。
void write(int c) 写入单个字符。
void write(String str) 写入字符串。
void write(String str, int off, int len) 写入字符串的某一部分。

源码分析

/** 
 * 文件字符输出流、与国际接轨、创建了此流。 
 * 仅仅是提供四个构造方法、还是调用OutputStreamWriter的默认编码的构造方法。 
 * 所以FileWriter使用的方法本质都是通过OutputStreamWriter将FileOutputStream传递给StreamEncoder来内部操作字节。给我们展现的则是操作字符。 
 */  
public class FileWriter extends OutputStreamWriter {  
  
    /** 
     * 调用OutputStreamWriter默认编码的构造方法构造FileWriter流。此流是在指定目的地中替换原有内容 
     * 从方法也可以看出、是对FileOutputStream的包装。 
     */  
    public FileWriter(String fileName) throws IOException {  
        super(new java.io.FileOutputStream(fileName));  
    }  
  
    /** 
     * 调用OutputStreamWriter默认编码创建FileWriter。此流通过传入的append值决定是否目的地中原有内容替换 
     */  
    public FileWriter(String fileName, boolean append) throws IOException {  
        super(new java.io.FileOutputStream(fileName, append));  
    }  
  
    /** 
     * 调用OutputStreamWriter默认编码的构造方法构造FileWriter流。此流是在指定目的地中替换原有内容 
     */  
    public FileWriter(File file) throws IOException {  
    super(new java.io.FileOutputStream(file));  
    }  
  
    /** 
     * 调用OutputStreamWriter默认编码的构造方法构造FileWriter流。此流通过传入的append值决定是否目的地中原有内容替换 
     */  
    public FileWriter(File file, boolean append) throws IOException {  
        super(new java.io.FileOutputStream(file, append));  
    }  
  
    /** 
     * 调用OutputStreamWriter默认编码创建FileWriter。此流通过传入的append值决定是否目的地中原有内容替换 
     */  
    public FileWriter(FileDescriptor fd) {  
        super(new java.io.FileOutputStream(fd));  
    }
}

例子

使用字符流拷贝一个文本文件

public class Demo1 {
    public static void main(String[] args) throws IOException {
        writeTest1();
    }
    public static void  writeTest1() throws IOException{
        //找到目标文件
        File file = new File("F:\\a.txt");
        //建立数据输出通道
        FileWriter fileWriter = new FileWriter(file,true);
        //准备数据,把数据写出
        String data = "今天天气非常好!!";
        fileWriter.write(data);  //字符流具备解码的功能。
        //刷新字符流
//        fileWriter.flush();
        //关闭资源
        fileWriter.close();
    }
}

总结

1. 使用FileWriter写数据的时候,FileWriter内部是维护了一个1024个字符数组的,写数据的时候会先写入到它内部维护的字符数组中,如果需要把数据真正写到硬盘上,需要调用flush或者是close方法或者是填满了内部的字符数组。

2. 使用FileWriter的时候,如果目标文件不存在,那么会自动创建目标文件。

3. 使用FileWriter的时候, 如果目标文件已经存在了,那么默认情况会先情况文件中的数据,然后再写入数据 , 如果需要在原来的基础上追加数据,需要使用“new FileWriter(File , boolean)”的构造方法,第二参数为true。