1. 程式人生 > >使用Apache Commons IO組件讀取大文件

使用Apache Commons IO組件讀取大文件

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組件讀取大文件