使用 filereader 读取文本文件时,核心做法是实例化对象指定路径,并通过循环调用 read() 方法获取字符数据。该流默认使用平台编码(如 windows 的 gbk),适合处理纯文本内容。若需指定 utf-8 等特定编码,应改用 inputstreamreader 包装 fileinputstream。

FileReader 读取文件的基本流程是什么
基本流程包括创建流、循环读取、处理数据和关闭资源。具体实现中,read() 方法返回一个整数,表示读取到的字符值;当返回值等于 -1 时,表示已到达文件末尾。建议在 finally 块或使用 try-with-resources 语法确保流被正确关闭,防止资源泄漏。

import java.io.FileReader;
import java.io.IOException;
public class FileReaderDemo {
public static void main(String[] args) {
// 使用 try-with-resources 自动关闭流
try (FileReader reader = new FileReader("test.txt")) {
int charData;
while ((charData = reader.read()) != -1) {
System.out.print((char) charData);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
预期结果:控制台打印出 test.txt 文件中的所有内容,每行字符依次输出,无额外格式。
如何高效地批量读取字符数据
频繁调用 read() 单个字符效率较低,推荐使用带缓冲区的 BufferedReader 包装 FileReader。通过 readLine() 方法可以一次性读取一行文本,减少 I/O 操作次数,显著提升大文件读取性能。

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class BufferedReaderDemo {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new FileReader("test.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
预期结果:逐行打印 test.txt 的内容,每行以换行符分隔,提升读取速度。
当 FileReader 遇到非文本二进制文件时会发生什么
若将 FileReader 用于读取图片、音频等非文本二进制文件,会导致数据解析错误。因为 FileReader 假设输入为字符序列,会将字节按编码规则转换为字符,产生乱码或抛出异常。此时应改用 FileInputStream 进行原始字节读取。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











