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

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

Java 提供了字符流,用于操作字符。

与字节流类似,字符流也有两个抽象基类,分别是 Reader 和 Writer:
字符流也是由两个抽象基类衍生出很多子类,由子类来实现功能,先来了解一下它们的子类结构,如图 1 和图 2 所示。


图 1 Reader子类结构图


图 2 Writer子类结构图

可以看出,这些子类都是以它的抽象基类为结尾命名的,并且大多都是成对出现的,如 CharArrayReader 和 CharArrayWriter。接下来,我们详细讲解字符流的使用。

Reader 和 Writer 有众多子类,其中 FileReader 和 FileWriter 是两个很常用的子类,FileReader 类是用来从文件中读取字符的,操作文件的字符输入流。

接下来,通过案例来演示如何从文件中读取字符。首先在当前目录新建一个文本文件 read.txt,文件内容如下:
c.biancheng.net
fileReader
创建文件完成后,开始编写代码:
import java.io.*;

public class Demo {
    public static void main(String[] args) throws Exception {
        File file = new File("read.txt");
        FileReader fileReader = new FileReader(file); // 定义len,记录读取的字符
        int len;
        while ((len = fileReader.read()) != -1) { // 判断是否读取到文件的末尾
            System.out.print((char) len); // 打印文件内容
        }
        fileReader.close(); // 释放资源
    }
}
程序的运行结果为:

c.biancheng.net
fileReader

程序中首先定义了一个文件字符输入流,然后在创建输入流实例时,将文件以参数传入。读取到文件后,用变量 len 记录读取的字符数,然后循环输出。

这里要注意,len 是 int 类型,所以输出时要强转类型,第 9 行代码中将 len 强转为 char 类型。

与 FileReader 类对应的是 FileWriter 类,它用来将字符写入文件,操作文件字符输出流。

接下来,通过案例来演示如何将字符写入文件:
import java.io.*;

public class Demo {
    public static void main(String[] args) throws Exception {
        File file = new File("read.txt");
        FileWriter fileWriter = new FileWriter(file); // 写入文件的内容
        fileWriter.write("C语言中文网是专业的编程学习平台"); // 写入文件的内容
        System.out.println("已保存到read.txt!");
        fileWriter.close(); // 释放资源
    }
}
程序的运行结果如下:

已保存到read.txt!

程序的运行结果显示已保存到 read.txt 文件,文件内容如下:

C语言中文网是专业的编程学习平台

FileWriter 与 FileOutputStream 类似,如果指定的目标文件不存在,则先新建文件,再写入内容,如果文件存在,会先清空文件内容,然后写入新内容,但是结尾不加换行符。

如果想在文件内容的末尾追加内容,则需要调用构造方法 FileWriter(String FileName,boolean append) 来创建文件字符输出流对象,将参数 append 指定为 true 即可,将实例例第 6 行代码修改如下:
FileWriter fileWriter = new FileWriter(file, true);
再次运行程序,输出流会将字符追加到文件内容的末尾,不会清除文件本身的内容,结尾同样是没有换行符的。

相关文章