我有一個由數據行組成的數據文件,換行符分隔。我需要將文件的內容讀入字符串數組中,並且我想高效地創建正確大小的數組。它是最有效的什麼是確定文本文件長度的最有效方法?
- 使用ArrayList,
- 掃描通過使用BufferedReader類,標誌着開始,計數線,然後回正在重置至刻度, 或
- 文件???
我有一個由數據行組成的數據文件,換行符分隔。我需要將文件的內容讀入字符串數組中,並且我想高效地創建正確大小的數組。它是最有效的什麼是確定文本文件長度的最有效方法?
使用ArrayList
(您的選項#1)。用BufferedReader
的readLine()
方法逐行讀入文本文件。它簡單,高效和可維護。
最好的辦法是用一個操作讀入整個文件。這是因爲磁盤IO通常相對較慢,並且可能是應用程序中速度最慢的部分。將整個文件讀入一個大字符串,然後在新行標記('\ n')上使用split。這可能是最簡單,最有效的方法。 Split()將爲您生成一個包含數據的字符串數組。
如何將整個文件讀入字符串? – TravisThomas 2012-04-02 04:41:16
您可以嘗試File.readFileToString:http://commons.apache.org/io/api-1.4/org/apache/commons/io/FileUtils.html#readFileToString%28java.io.File%29 – Oleksi 2012-04-02 04:45:51
這取決於文件的大小和什麼樣的效率,你需要:
的ArrayList是一種簡單而有效的選擇。只需創建一個新實例並逐個從BufferedReader中添加字符串。然後在這個列表上調用toArray()。
將整個文件作爲字符串讀取並手動分割(我相信效率更高),或者將java.lang.String提供的正則表達式分割爲字符串數組。如果您手動執行此操作,則可以計算「\ r \ n」符號的數量並創建一個確切大小的數組(即,您將保存數組列表重新分配)。
您可以使用ArrayList和使用優化下面的方法它的大小:
此外,如果您知道每行的平均大小,您可以嘗試確定基於文件長度(file_size/line_avg_size)的數組大小。
ArrayList比你的第二個更可取。
我不想用我自己的代碼重新發明車輪,當有經過驗證的解決方案時。
創建一個編寫器來計算寫入的字符數,並使用它來包裝您的OutputStreamWriter。
注:正確的方式來保存的文本文件是:
new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), encoding)));
的編碼是很重要的;它通常是「UTF-8」。
這個鏈給你兩個地方,你可以注入你的包裝:你可以包裝作家得到的字符數或內部OutputStream
得到字節寫入。
3:使用掃描儀(自1.5):懶惰(但惡意)的程序員工具,具有字符串掃描所需的所有選項,並對所有文件有效。
掃描儀不提供任何方法來確定文件的長度。 – TravisThomas 2012-04-02 06:52:48
@ trav1th:因爲它不會在內存中加載文件,對於任何文件大小它都是一個好工具(沒有'堆空間'問題)。在Java 7中,nio.file.Files.size(PathOfFile)給出了其他有用方法的大小。這也是對3的迴應?這可以表明,第一次接近並不是最合適的。 – 2012-04-02 07:19:35
我們在談論什麼大小的文件? – moodywoody 2012-04-02 04:39:42
幾百行,但我想任何大小的文件的答案。 – TravisThomas 2012-04-02 04:45:16