使用Apache Commons IO組件讀取大文件
阿新 • • 發佈:2017-10-17
utils apache 普通 out right ack close 一次 solid
Apache Commons IO讀取文件代碼如下:
Files.readLines(new File(path), Charsets.UTF_8); FileUtils.readLines(new File(path));
以上代碼在讀取普通文本文件時沒有任何問題,但是在讀取大文件時會拋出“OutOfMemoryError”異常。
因為:文件的所有行都被存放在內存中,當文件足夠大時內存吃緊,導致程序拋出異常。
解決思路:
通常不需要把文件的所有行一次性地放入內存中,相反,我們只需要遍歷文件的每一行,然後做相應的處理,處理完之後把它扔掉。所以,這正是我們將要做的——通過行叠代,而不是把所有行都放在內存中。
LineIterator it = FileUtils.lineIterator(theFile, "UTF-8"); try { while (it.hasNext()) { String line = it.nextLine(); // do something with line } } finally { LineIterator.closeQuietly(it); }
使用Apache Commons IO組件讀取大文件