Java FileReader和FileWriter字符流的用法(附带实例)
Java 提供了字符流,用于操作字符。
与字节流类似,字符流也有两个抽象基类,分别是 Reader 和 Writer:
字符流也是由两个抽象基类衍生出很多子类,由子类来实现功能,先来了解一下它们的子类结构,如图 1 和图 2 所示。

图 1 Reader子类结构图

图 2 Writer子类结构图
可以看出,这些子类都是以它的抽象基类为结尾命名的,并且大多都是成对出现的,如 CharArrayReader 和 CharArrayWriter。接下来,我们详细讲解字符流的使用。
Reader 和 Writer 有众多子类,其中 FileReader 和 FileWriter 是两个很常用的子类,FileReader 类是用来从文件中读取字符的,操作文件的字符输入流。
接下来,通过案例来演示如何从文件中读取字符。首先在当前目录新建一个文本文件 read.txt,文件内容如下:
这里要注意,len 是 int 类型,所以输出时要强转类型,第 9 行代码中将 len 强转为 char 类型。
与 FileReader 类对应的是 FileWriter 类,它用来将字符写入文件,操作文件字符输出流。
接下来,通过案例来演示如何将字符写入文件:
如果想在文件内容的末尾追加内容,则需要调用构造方法 FileWriter(String FileName,boolean append) 来创建文件字符输出流对象,将参数 append 指定为 true 即可,将实例例第 6 行代码修改如下:
与字节流类似,字符流也有两个抽象基类,分别是 Reader 和 Writer:
- 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 是 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);再次运行程序,输出流会将字符追加到文件内容的末尾,不会清除文件本身的内容,结尾同样是没有换行符的。