如何使用 Java 逐行读取大型文本文件?

新手上路,请多包涵

我需要使用 Java 逐行读取大约 5-6 GB 的大文本文件。

我怎样才能快速做到这一点?

原文由 manoj singh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 839
1 个回答

一个常见的模式是使用

try (BufferedReader br = new BufferedReader(new FileReader(file))) {
    String line;
    while ((line = br.readLine()) != null) {
       // process the line.
    }
}

如果您假设没有字符编码,您可以更快地读取数据。例如ASCII-7,但不会有太大区别。您对数据所做的操作很可能需要更长的时间。

编辑:一种不太常见的模式,可以避免 line 泄漏的范围。

 try(BufferedReader br = new BufferedReader(new FileReader(file))) {
    for(String line; (line = br.readLine()) != null; ) {
        // process the line.
    }
    // line is not visible here.
}


更新:在 Java 8 中你可以做

try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
        stream.forEach(System.out::println);
}

注意:您必须将 Stream 放在 try-with-resource 块中以确保对其调用 #close 方法,否则在 GC 稍后执行它之前,底层文件句柄永远不会关闭。

原文由 Peter Lawrey 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题