使用Apache Commons IO组件读取大文件

Posted 星火燎原

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Apache Commons IO组件读取大文件相关的知识,希望对你有一定的参考价值。

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组件读取大文件的主要内容,如果未能解决你的问题,请参考以下文章

java获得上传文件的路径

配置Apache工具组件

java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream

java读取某个目录是否有新增文件(轮询)

Tomcat中使用commons-io-2.5发生的错误java.lang.ClassNotFoundException: org.apache.commons.io.IOUtils

跟我学apache-commonscommons-io的使用