读取大文件出错List lines = IOUtils.readLines(new FileInputStream(filePATH)

hafoo 2013-01-28 03:06:40
读取一个2G的文件,发生错误:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2760)
at java.util.Arrays.copyOf(Arrays.java:2734)
at java.util.ArrayList.ensureCapacity(ArrayList.java:167)
at java.util.ArrayList.add(ArrayList.java:351)
at org.apache.commons.io.IOUtils.readLines(IOUtils.java:504)
at org.apache.commons.io.IOUtils.readLines(IOUtils.java:457)
at com.sany.client.test.QzjTemp.main(QzjTemp.java:38)
读取方法是:
String path=JOptionPane.showInputDialog(null,"请输入路径:");
File filePATH = new File(path);
List<String> lines = IOUtils.readLines(new FileInputStream(filePATH));
在最后一句List<String> lines = IOUtils.readLines(new FileInputStream(filePATH)); 出错。

文件是一个***.log文件
...全文
712 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
monsieur07 2015-09-28
  • 打赏
  • 举报
回复
参数应该是InputStream类型的
hafoo 2013-01-30
  • 打赏
  • 举报
回复
呵呵,确实是这个地方设置有问题,我以为文件多大就要设置缓存多大。
霜之哀伤 2013-01-28
  • 打赏
  • 举报
回复
你有多少内存,用5G的缓冲...
hafoo 2013-01-28
  • 打赏
  • 举报
回复
1. File file = new File(filepath); 2. BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file)); 3. BufferedReader reader = new BufferedReader(new InputStreamReader(fis,"utf-8"),5*1024*1024*1024);// 用5G的缓冲读取文本文件 4. 5. String line = ""; 6. while((line = reader.readLine()) != null){ 7. //TODO: write your business 8. } 也是出错 BufferedReader reader = new BufferedReader(new InputStreamReader(fis,"utf-8"),5*1024*1024*1024);//
霜之哀伤 2013-01-28
  • 打赏
  • 举报
回复
随便本Java基础的书,IO那一章肯定有类似的代码
hafoo 2013-01-28
  • 打赏
  • 举报
回复
怎么搞呀?不会写呀?
霜之哀伤 2013-01-28
  • 打赏
  • 举报
回复
那就自己用流读呗,这种方法把所有数据一起放内存,当然受不了...

58,451

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧