读取大文件出错List<String> 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文件
...全文
511 7 点赞 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
那就自己用流读呗,这种方法把所有数据一起放内存,当然受不了...
  • 打赏
  • 举报
回复
相关推荐
发帖
Eclipse
加入

5.8w+

社区成员

Java Eclipse
申请成为版主
帖子事件
创建了帖子
2013-01-28 03:06
社区公告
暂无公告