使用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); }
posted on 2017-10-17 12:22 xusweeter 阅读(1608) 评论(0) 编辑 收藏 举报