我想打印一份巨大文本文件的每一行(超过 600,000 MB)。
但是,当我尝试下面的代码时,在达到第1,000,000行之前就会出现“...OutOfMemoryError:Java堆空间”。
有没有更好的方法来处理输入,而不是使用 FileReader 和 LineNumberReader?
FileReader fReader = new FileReader(new File("C:/huge_file.txt"));
LineNumberReader lnReader = new LineNumberReader(fReader);
String line = "";
while ((line = lnReader.readLine()) != null) {
System.out.println(lnReader.getLineNumber() + ": " + line);
}
fReader.close();
lnReader.close();
提前感谢您!
感谢大家的回答!
我最终找到了内存泄漏的原因,是一个未使用的Java类实例,它在每个行迭代中复制自己。换句话说,它与文件加载部分无关。
System.out.print(lnReader.getLineNumber() + ": "); System.out.println(line);
,它避免了创建第二个包含整个行和更多内容的StringBuilder/String。 - Peter Lawrey