使用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.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream
Tomcat中使用commons-io-2.5发生的错误java.lang.ClassNotFoundException: org.apache.commons.io.IOUtils