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

时间:2021-09-29 21:40:42
读取一个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文件

7 个解决方案

#1


那就自己用流读呗,这种方法把所有数据一起放内存,当然受不了...

#2


怎么搞呀?不会写呀?

#3


随便本Java基础的书,IO那一章肯定有类似的代码

#4


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);// 

#5


你有多少内存,用5G的缓冲...

#6


呵呵,确实是这个地方设置有问题,我以为文件多大就要设置缓存多大。

#7


参数应该是InputStream类型的

#1


那就自己用流读呗,这种方法把所有数据一起放内存,当然受不了...

#2


怎么搞呀?不会写呀?

#3


随便本Java基础的书,IO那一章肯定有类似的代码

#4


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);// 

#5


你有多少内存,用5G的缓冲...

#6


呵呵,确实是这个地方设置有问题,我以为文件多大就要设置缓存多大。

#7


参数应该是InputStream类型的