我的文件中填充了文字行。文件大小约为150GB。什么最佳解决方案按字母顺序对所有行进行排序?例如:
INPUT:
我们非常肯定有人曾经说过这样的人 千禧一代。无论如何,这是我们生活的短语 在这里的字母。
拥有无与伦比的精力和激情 创造生活的品牌和
输出:
无论如何,这是我们在Alphabet生活的短语。
呼吸 在千禧一代中。
拥有无与伦比的能量和 创造生活品牌的热情和我们非常肯定 有名的人曾经说过。
答案 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