我正在开展一个大项目,我有超过100万行数据。数据分为各种文件,每个文件包含20,000行。现在逐行读取每个文件的数据,并将一些变量x连接到每一行。我将这些连接的字符串存储到数组列表中。然后将该数组列表逐行保存到输出文件中。
每个文件需要3-4分钟。无论如何都要将整个ArrayList
一次性写入文件,这样就不会花费那么多时间。或者有更快的方法吗?
以下是一些示例代码:
List<String> outputData = new ArrayList<String>();
//Output arraylist containing concatenated data
writeLines(File outputFile,outputData); //The data is written to file
实现这项任务的最快方法是什么?
答案 0 :(得分:5)
准备好ArrayList
后,您可以使用writeLines
中的FileUtils
方法一次性编写整个ArrayList
。
查看文档here以及可用的各种writeLines
方法。
答案 1 :(得分:0)
正确的解决方案可能是跳过ArrayList
并直接写入文件。但是你应该考虑,磁盘IO比RAM慢。
像这样测试:
Collection<String> list = new ArrayList<String>();
for (int i = 0; i < 1000000; i++) {
// just fill something in:
list.add("A " + i + " " + new Date() + "!");
}
long start = System.nanoTime();
PrintWriter out = new PrintWriter("example.out");
for (String line : list) {
out.println(line);
}
out.close();
long end = System.nanoTime();
System.out.println((end - start) / 1000000000D + " sec");
在旧戴尔笔记本电脑上打印:
0.508509454 sec
答案 2 :(得分:0)
首先,我使用writeStringtoFile将单个行写入文件,这需要花费很长时间。似乎首先保存数组列表中的所有行并使用writeLines函数编写整个列表解决了问题。现在它只需要第二个。
感谢大家的帮助
艾哈迈尔