Java中用BufferedReader按行读取文本文件需配合FileReader或InputStreamReader构建带缓冲的字符流,调用readLine()逐行获取内容;推荐用InputStreamReader显式指定UTF-8编码并结合try-with-resources确保资源安全关闭。

Java 中用 BufferedReader 按行读取文本文件,核心是配合 FileReader 或 InputStreamReader 构建带缓冲的字符流,再调用 readLine() 方法逐行获取内容。
创建 BufferedReader 的两种常用方式
推荐使用带字符编码的方式,避免乱码(尤其含中文时):
- 通过
FileReader(默认使用平台编码,不推荐用于跨平台场景):BufferedReader reader = new BufferedReader(new FileReader("file.txt")); - 更稳妥:用
InputStreamReader显式指定编码(如 UTF-8):BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("file.txt"), "UTF-8"));
按行读取的标准写法(推荐 try-with-resources)
必须确保资源关闭,否则可能造成文件句柄泄漏。用 try-with-resources 最安全:
try (BufferedReader reader = new BufferedReader(
new InputStreamReader(new FileInputStream("data.txt"), "UTF-8"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line); // 处理每一行
}
} catch (IOException e) {
e.printStackTrace();
}
注意:readLine() 返回 null 表示已到文件末尾,不是空行;空行会返回空字符串 ""。
立即学习“Java免费学习笔记(深入)”;
常见注意事项和小技巧
-
readLine()自动去掉行尾的\n、\r或\r\n,不保留换行符 - 若需保留原始换行信息,不能用
readLine(),应改用read(char[])或read()逐字节/字符读 - 大文件无需一次性加载进内存,
BufferedReader内部默认 8KB 缓冲区,效率较高 - 从 Java 7 起,也可用
Files.lines(Paths.get("file.txt"))得到Stream<string></string>,适合函数式处理
简单封装成工具方法(可选)
如果频繁读取,可封装为静态方法,统一处理编码与异常:
public static List<String> readLines(String filePath) throws IOException {
return Files.readAllLines(Paths.get(filePath), StandardCharsets.UTF_8);
}
或流式处理(不全加载到内存):
public static void processLines(String filePath) throws IOException {
try (Stream<String> lines = Files.lines(Paths.get(filePath), StandardCharsets.UTF_8)) {
lines.forEach(System.out::println);
}
}


















