推荐用 BufferedReader 配合 Files.newBufferedReader() 按行读取文本文件,支持指定编码、自动处理换行符;Files.lines() 适合流式操作但需注意流关闭;写文件推荐 BufferedWriter 配合 newLine()。

Java 中按行读取文本文件,推荐用 BufferedReader 配合 Files.newBufferedReader(),简洁高效且自动处理编码;避免用过时的 FileReader 直接读取(不指定字符集易乱码)。
使用 try-with-resources + BufferedReader(推荐)
这是最常用、最安全的方式,自动关闭资源,支持指定字符编码:
- 用
Files.newBufferedReader(Paths.get("xxx.txt"), StandardCharsets.UTF_8)创建带编码的读取器 -
readLine()每次返回一行字符串,返回null表示文件结束 - 整个过程包裹在
try-with-resources中,无需手动close()
try (BufferedReader reader = Files.newBufferedReader(Paths.get("data.txt"), StandardCharsets.UTF_8)) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
用 Files.lines() 流式处理(适合简单遍历或函数式操作)
Java 8+ 提供的便捷方式,返回 Stream<String>,适合配合 lambda 或流操作:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 内部已使用
BufferedReader,同样支持指定编码 - 必须用
try包裹或确保流被关闭(例如用forEach后自动关闭,但filter/map等中间操作不会触发关闭,需显式close()) - 适合“读完即用”场景,比如逐行打印、统计行数、过滤关键词
try (Stream<String> lines = Files.lines(Paths.get("data.txt"), StandardCharsets.UTF_8)) {
lines.forEach(System.out::println);
}
注意编码与换行符兼容性
读取结果是否正确,高度依赖编码和换行符识别:
立即学习“Java免费学习笔记(深入)”;
- 务必显式传入
StandardCharsets.UTF_8(或其他实际编码),不要依赖平台默认编码 -
readLine()自动识别\n、\r\n、\r为行分隔符,无需手动切分 - 如果文件含 BOM(如 UTF-8 with BOM),
Files.newBufferedReader默认不跳过,可能在首行开头出现\uFEFF,必要时需手动去除
写文件时也建议按行写入(呼应读取习惯)
写文本文件按行输出,推荐 BufferedWriter:
- 用
Files.newBufferedWriter(Paths.get("out.txt"), StandardCharsets.UTF_8)创建 - 调用
write(String)写内容,再调用newLine()换行(比拼接"\n"更跨平台) - 同样用
try-with-resources确保写出缓冲区并关闭

















