最常用且推荐的方式是使用 bufferedreader 配合 files.newbufferedreader(),显式指定 standardcharsets.utf_8 编码,结合 try-with-resources 自动管理资源;其次可选 files.lines() 进行流式处理,需注意关闭 stream;传统 filereader 因依赖平台编码而不推荐用于含中文的文件。

Java 中读取文本文件按行操作,最常用且推荐的方式是使用 BufferedReader 配合 Files.newBufferedReader() 或 FileReader,兼顾效率与简洁性。Java 7 引入的 NIO.2(java.nio.file)还提供了更现代、安全的替代方案。
用 BufferedReader + Files.newBufferedReader(推荐)
这是目前最主流、健壮且支持自动编码识别的方式。它能正确处理 UTF-8 等常见编码,并自动管理资源(配合 try-with-resources)。
- 默认使用系统默认编码,建议显式指定
StandardCharsets.UTF_8 - 逐行读取,返回
null表示文件结束 - 无需手动关闭流,try-with-resources 自动处理
示例:
Path path = Paths.get("data.txt");
try (BufferedReader reader = Files.newBufferedReader(path, StandardCharsets.UTF_8)) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
用 Files.lines() 流式处理(适合函数式风格)
Java 8+ 提供的 Files.lines() 返回 Stream<string></string>,适合过滤、映射等操作,代码更简洁。
- 内部也基于
BufferedReader,性能相当 - 必须显式关闭 Stream(或用 try-with-resources 包裹),否则可能泄露资源
- 适合一次性处理,如统计行数、查找包含某关键词的行
示例:
Path path = Paths.get("data.txt");
try (Stream<string> lines = Files.lines(path, StandardCharsets.UTF_8)) {
lines.filter(line -> line.contains("error"))
.forEach(System.out::println);
}</string>
传统方式:BufferedReader + FileReader(兼容老版本)
在 Java 6 或需明确控制字符流时可用,但需注意 FileReader 总是使用平台默认编码,容易引发乱码。
- 不推荐用于含中文等非 ASCII 字符的文件
- 若坚持使用,应改用
InputStreamReader+FileInputStream并指定编码
安全写法(替代 FileReader):
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(new FileInputStream("data.txt"), StandardCharsets.UTF_8))) {
// 同上 readLine() 循环
}
小提示:跳过空行或忽略首尾空白
实际处理中常需清洗数据。可在读取后简单判断:
-
if (line != null && !line.trim().isEmpty())跳过空行和纯空白行 -
line = line.strip()(Java 11+)或line.trim()去除首尾空白
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











