2014-01-10 32 views
2

我正在研究一個擁有超過100萬行數據的大項目。數據分成各個文件,每個文件包含20000行。現在來自每個文件的數據被逐行讀取,並且一些變量x被連接到每一行。我將這些連接的字符串存儲到數組列表中。然後這個數組列表被保存到逐行輸出文件。將整個列表寫入java中的文件

這是每個文件需要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

我將在整個lisp中使用一個循環將其附加到文件 – Rugal

+0

如何寫入文件*現在*? –

+0

你的writeLines方法是怎樣的? –

回答

5

一旦你的ArrayList隨時可以使用writeLines方法從FileUtils寫一氣呵成整個ArrayList

查看文檔here和各種可用的writeLines方法。

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 
+0

你好,謝謝你的回答,但我也使用這個解決方案,但它的速度更慢。有沒有更快的文件寫入方式? –

+0

線條有多長?我剛剛生成了一個具有1.000.000行的文件,並且耗時不到1秒。 –

0

首先我用writeStringtoFile寫個人行文件,花了很長時間。看起來像首先保存數組列表中的所有行,並用writeLines函數寫完整列表解決了這個問題。現在只需要秒。

感謝大家的幫助

艾哈邁爾