如何在 Java 中逐行读取文件?

2025年3月29日 | 阅读 4 分钟

Java 提供了多种高效实现此任务的方法。在本节中,我们将探讨在 Java 中逐行读取文件的各种方法,涵盖传统和现代方法。

有以下几种逐行读取文件的方法。

  • 使用 BufferedReader 类
  • 使用 Scanner 类

使用 BufferedReader 类

使用 Java 的 BufferedReader 类是 Java 中逐行读取文件的最常见和最简单的方法。它属于 java.io 包。Java BufferedReader 类提供了 readLine() 方法来逐行读取文件。该方法的签名是:

该方法读取一行文本。它返回一个包含该行内容的字符串。该行必须以换行符 ("\n") 或回车符 ("\r") 之一终止。

这种方法简单高效,适用于读取大文件,因为它缓冲了来自文件的输入,减少了 I/O 操作的次数。

Java 程序逐行读取文件

在下面的示例中,Demo.txt 文件由 FileReader 类读取。BufferedReader 类的 readLine() 方法逐行读取文件,并将每一行附加到 StringBuffer,后面跟着一个换行符。然后将 StringBuffer 的内容输出到控制台。

ReadLineByLineExample1.java

输出

How to read file line by line in Java

使用 Scanner 类

与 BufferedReader 类相比,Java 的 Scanner 类提供了更多的实用方法。Java Scanner 类提供了 nextLine() 方法来方便地逐行读取文件内容。nextLine() 方法返回与 readLine() 方法相同的 String。Scanner 类还可以从 InputStream 读取文件。

Scanner 提供了解析不同类型输入的灵活性,但由于其内部缓冲机制,它在读取大文件方面的效率可能不如 BufferedReader。

Java 程序逐行读取文件

ReadLineByLineExample2.java

输出

How to read file line by line in Java

最佳实践和注意事项

在 Java 中逐行读取文件时,考虑各种因素以确保效率、可靠性和可维护性至关重要。

  • 异常处理: 读取文件时,请始终妥善处理 IOExceptions,以防止意外失败。使用 try-with-resources 语句(Java 7 中引入)可确保正确的资源管理和资源的自动关闭。
  • 编码: 读取文件时,请指定字符编码,尤其是在处理非 ASCII 字符时。FileReader 构造函数和 Files.lines() 方法允许将 charset 指定为可选参数。
  • 性能: 根据文件的大小和性质选择合适的方法。BufferedReader 由于其高效的缓冲而非常适合大文件,而 Files.lines() 和 Scanner 适用于较小文件和基于流的操作。
  • 内存消耗: 处理大文件时,要注意内存消耗。BufferedReader 和 Files.lines() 以块的形式高效地读取文件,从而最大限度地减少内存使用。如果不需要,请避免将整个文件加载到内存中。
  • 错误处理: 实现健壮的错误处理和日志记录机制,以优雅地处理与文件相关的错误。考虑文件未找到、权限问题或意外文件格式等场景。

结论

逐行读取文件是 Java 编程中的一项基本操作,对于从数据处理到文件解析的各种任务都至关重要。通过掌握不同的文件读取技术,开发人员可以有效地处理各种文件处理需求,同时确保代码的可靠性和性能。无论是利用 BufferedReader 和 FileReader 等传统方法,还是 Files.lines() 和 Scanner 等现代方法,理解 Java 中文件读取的细微差别和最佳实践对于构建健壮高效的应用程序至关重要。