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

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

我该如何快速做到这一点?


一个常见的模式是使用

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稍后执行为止。


看这个博客:

  • Java逐行读取文件 - Java教程
  • 缓冲区大小可以被指定,或者可以使用默认大小。 默认值对于大多数目的而言足够大。

    // Open the file
    FileInputStream fstream = new FileInputStream("textfile.txt");
    BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
    
    String strLine;
    
    //Read File Line By Line
    while ((strLine = br.readLine()) != null)   {
      // Print the content on the console
      System.out.println (strLine);
    }
    
    //Close the input stream
    br.close();
    

    一旦java-8发布(2014年3月),您就可以使用流:

    try (Stream<String> lines = Files.lines(Paths.get(filename), Charset.defaultCharset())) {
      lines.forEachOrdered(line -> process(line));
    }
    

    打印文件中的所有行:

    try (Stream<String> lines = Files.lines(file, Charset.defaultCharset())) {
      lines.forEachOrdered(System.out::println);
    }
    
    链接地址: http://www.djcxy.com/p/7663.html

    上一篇: How to read a large text file line by line using Java?

    下一篇: building a high scale java app, what stack would you use?