将整个列表写入java中的文件

时间:2014-01-10 09:44:42

标签: java file arraylist io java-io

我正在开展一个大项目,我有超过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

实现这项任务的最快方法是什么?

3 个答案:

答案 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函数编写整个列表解决了问题。现在它只需要第二个。

感谢大家的帮助

艾哈迈尔