将整个列表写入java中的文件
Posted
技术标签:
【中文标题】将整个列表写入java中的文件【英文标题】:Writing an entire list to a file in java 【发布时间】:2014-01-29 05:19:23 【问题描述】:我正在从事一个拥有超过 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
完成这项任务的最快方法是什么?
【问题讨论】:
我将使用循环遍历整个 lisp 将其附加到文件 您现在如何写入文件? 你的 writeLines 方法是什么样子的? @MoritzPetersen writeLines 负责写作部分。 @JiriKusa 它内置在我认为使用循环的 commons io 功能中 【参考方案1】:一个适当的解决方案可能是跳过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
【讨论】:
您好,感谢您的回答,但我也使用了此解决方案,但速度较慢。有没有更快的文件写入方式? 线条有多长?我刚刚生成了一个包含 1.000.000 行的文件,并且只用了不到 1 秒。【参考方案2】:首先,我使用 writeStringtoFile 将单独的行写入文件,这需要很长时间。似乎首先将所有行保存在数组列表中并使用 writeLines 函数写入整个列表解决了这个问题。现在只需要第二个。
感谢大家的帮助
艾玛
【讨论】:
【参考方案3】:准备好ArrayList
后,您可以使用FileUtils
中的writeLines
方法一次性写入整个ArrayList
。
查看文档here 和各种可用的writeLines
方法。
【讨论】:
以上是关于将整个列表写入java中的文件的主要内容,如果未能解决你的问题,请参考以下文章
使用 SnakeYaml 将 java 对象写入文件 - 使用 Yaml.dump() 时不会写出内部对象列表
如何将数据从 python 列表中的列和行写入 csv 文件?