2011-09-21 79 views
0

我在逐行添加行時生成一個csv文件。換句話說,我將一行一行追加到文件末尾。我使用opencsv來讀取和寫入csv文件。如何在java中有效地在java中使用opencsv向現有的csv文件附加一行行?

問題是我需要做一些處理纔能有一個新行。所以我正在做的是讀取現有的csv文件(約6mb文件)並添加一行並寫入文件。所以它就像

該文件是x。我再放一行,該文件現在是x + 1。這當然涉及許多讀寫操作。我怎樣纔能有效地做到這一點。這不是一項家庭作業,既不是日誌文件處理。這將做幾次,但需要儘快完成。

謝謝。

我已經想過通過創建x個較小的csv文件然後合併來創建大的csv文件。它似乎並不高效。也許這是愚蠢的問題,但有沒有什麼方法可以在沒有閱讀的情況下添加新的行,並且寫入完整的數據,因爲瓶頸是每次將新行添加到文件時變得越來越慢。

+0

當您在附加模式下使用FileWriter創建CSVWriter時會發生什麼?它不應該吹走你現有的數據,這將允許你在沒有閱讀整個文件的情況下進行寫操作。 – Perception

+0

如何在追加模式下使用FileWriter創建CSVWriter?爲了創建CSVwriter,我將文件路徑和數據寫入或附加到它。 – Bob

+0

CSVWriter有一個採用FileWriter的替代構造函數。確保使用兩個參數構造函數(文件路徑,布爾值)創建FileWriter。 – Perception

回答

1

爲什麼不在後臺線程中緩衝寫入操作(提交一堆行,並且每當number> N或timeelapsed> T寫入磁盤時)還是您總是需要一個瞬時的一致結果?

另外,你可以正常APPEND一個SEEK(比閱讀整件事更便宜)。示例是帶有附加參數的RandomAccessFile對象或FileOutputStream/FileWriter。當然,這仍然有點貴。

最後,6MB並不是那麼大。爲什麼不把它全部讀出來並且懶洋洋地寫下來呢?假設這是一個單一的JVM進程,將其保存在內存中是最簡單的解決方案....

+0

6MB數據由ArrayList >表示。我不確定75000行是否可以安裝到4 GB RAM中。 – Bob

相關問題