首页 > 编程笔记 > Java笔记 阅读:23

Java字符流FileReader和FileWriter的用法(附带实例)

在 Java 中,FileReader 是 Reader 类的子类,实现了从文件中读取字符数据,是文件字符输入流。该类所有的方法都是从 Reader 类继承的。

FileReader 类常用的构造方法如下。
① FileReader(File file)
② FileReader(String fileName)
方法 ① 通过给定的 File 对象创建字符输入流;方法 ② 通过文件名字符串创建字符输入流。

和 FileReader 类相对的,是 FileWriter 类,常用的构造方法如下:
① FileWriter(File file)
② FileWriter(String fileName)
③ FileWriter(File file,boolean append)
④ FileWriter(String fileName,boolean append)

在创建输入/输出流时,如果文件不存在,就会抛出 FileNotFoundException 异常。

【实例】使用 FileReader 类与 FileWriter 类实现文本文件的复制。
import java.io.FileReader;
import java.io.FileWriter;

public class Example {
    public static void main(String[] args) {
        String inputPath = "D:\\Example.java";
        String outputPath = "D:\\chapter\\back_Example.java";
        try (
            FileReader freader = new FileReader(inputPath);
            FileWriter fwriter = new FileWriter(outputPath);
        ) {
            char[] buffer = new char[1024];
            int len = 0;
            while ((len = freader.read(buffer)) != -1) {
                fwriter.write(buffer, 0, len);
            }
            fwriter.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
运行程序,会将位于 D:\Example.java 的文件内容复制到 D:\chapter\back_Example.java 文件中。

需要注意的是,上述代码中使用的 buffer 字节数组是作为一个缓存数据的容器存在的。当每次调用 read() 方法时,都会从流中读取数组长度(实例中是 1024)个字符写入该数组缓存内,此时会从头开始覆盖数组中原有的内容。但是当流中剩余的数据小于数组长度时,仅读取剩余长度个字符写入该数组中。此时需要特别注意的是,该数组中的前半部分是本次写入的数据,而后半部分是上次写入操作遗留的数据。

在使用输出流的 write() 方法将数组中的数据写出时,必须指定 len,仅使用数组中本次写入的内容,避免输出上一次遗留的数据。

相关文章