将整个列表写入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 文件?

如何将字符串以换行符为界写入列表

使用 Python 将列表中的数据帧写入多个 excel 文件

使用 Java 写入文本文件会被缩短

Python:将列表写入 Pandas 中的列