bufferedreader按行读取文本推荐用try-with-resources自动管理资源,显式指定utf-8编码防乱码,循环中先readline()再判空处理更清晰,空行返回""需手动过滤,默认缓冲区8192字节已够用。

用 BufferedReader 按行读取文本是 Java 中最常用也最高效的方式之一,关键在于正确使用其 readLine() 方法,并配合合理的资源管理。
用 try-with-resources 自动关闭流
避免手动调用 close() 出错或遗漏,推荐直接用 try-with-resources 语法,JVM 会自动释放底层资源(包括 FileReader 或 InputStreamReader):
- 写法简洁,异常安全
- 即使读取中途抛异常,流也会被关闭
- 不支持 JDK 7 以下版本(但现代项目基本都 ≥ JDK 8)
逐行读取的标准写法
核心是循环调用 readLine(),它返回 String(不含换行符),读到末尾返回 null:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 不要用
while ((line = br.readLine()) != null)的赋值+判空写法在条件里(虽常见但可读性略差) - 更清晰的写法是先读、再判、再处理,尤其方便加日志或跳过空行
-
readLine()本身已做缓冲,无需额外包装或预读
注意编码问题(特别是中文)
BufferedReader 默认使用平台默认编码,Windows 是 GBK,Linux/macOS 通常是 UTF-8 —— 读取含中文的文件时极易乱码:
- 显式指定编码:用
Files.newBufferedReader(path, StandardCharsets.UTF_8)(推荐,JDK 7+) - 或组合
InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8) - 避免依赖
FileReader,它不接受编码参数,不可控
性能与边界情况提醒
它已经足够快,但有些细节影响健壮性:
- 大文件也不必自己调大缓冲区,默认 8192 字节对绝大多数场景够用
-
readLine()会吃掉\r、\n、\r\n,但不会把空行过滤掉 —— 空行会返回空字符串"",需自行判断是否跳过 - 如果文件最后一行没换行符,
readLine()仍能正常读出该行内容
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










