【问题标题】:Writing an entire list to a file in java将整个列表写入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 功能中

标签: java file arraylist io java-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 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-23
      • 1970-01-01
      • 2016-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多