处理来自java中具有大尺寸的文件的数据

时间:2017-01-29 04:40:27

标签: java

我的文件中填充了文字行。文件大小约为150GB。什么最佳解决方案按字母顺序对所有行进行排序?例如:

INPUT:

  

我们非常肯定有人曾经说过这样的人   千禧一代。无论如何,这是我们生活的短语   在这里的字母。
拥有无与伦比的精力和激情   创造生活的品牌和

输出:

  

无论如何,这是我们在Alphabet生活的短语。
呼吸   在千禧一代中。
拥有无与伦比的能量和   创造生活品牌的热情和我们非常肯定   有名的人曾经说过。

1 个答案:

答案 0 :(得分:2)

我们通常不需要同时在内存中的文件中的所有行 - 相反,我们只需要能够遍历每个行,进行一些处理并将其丢弃。所以,这正是我们要做的事情 - 在不保留内存的情况下迭代这些行。

FileInputStream inputStream = null;
Scanner sc = null;
try {
    inputStream = new FileInputStream(path);
    sc = new Scanner(inputStream, "UTF-8");
    while (sc.hasNextLine()) {
        String line = sc.nextLine();
        // System.out.println(line);
    }
    // note that Scanner suppresses exceptions
    if (sc.ioException() != null) {
        throw sc.ioException();
    }
} finally {
    if (inputStream != null) {
        inputStream.close();
    }
    if (sc != null) {
        sc.close();
    }
}

此解决方案将遍历文件中的所有行 - 允许处理每一行 - 而不保留对它们的引用 - 最后,不将它们保留在内存中。 http://www.baeldung.com/java-read-lines-large-file