0

我有一个包含大约 65 万行的文件。现在我希望使用 LineNumberReader 读取该文件的每一行。

但是,我在将这么多行添加到另一个 3rd 方库时遇到了 outofMemoryError ..

我打算做的是,一次读取 200000 行文件并将这些行添加到 3rd 方库。

我正在使用 LineNumberReader 但我认为整个文件正在被读取,尽管我提供了当行数达到 200000 时打破循环并将这些添加到 3rd 方库的条件。

相同的代码片段:

    LineNumberReader lnr=new LineNumberReader(new FileReader(file));
    String line=null;
    int i=0;      
    while(flags)
              {
     while( null != (line = lnr.readLine()) ){  
    i++;   
     3rdPartyLibrary.add(line.trim());
    if(i==200000)
                {      
                    System.out.println("Breaking");
                    lnr.mark(i);
                    break;
                }  
                if(i==400000)
                {
                    System.out.println("" );
                    lnr.mark(i);
                    break;
                }
                if(i==600000)
                {
                    System.out.println("BREAKING " );
                    lnr.mark(i);
                    break;
                }
     }
    if(line==null)
              {
                  System.out.println(" FLAG");
                  flags=false;
              }
lnr.reset();
    }

我打算在这里做的是在第一次迭代中从 0-200000 读取文件。然后读取每一行并添加到第 3 方库中。完成后,从 (200001-400000) 读取另外 200000 行,然后重复相同的活动。

需要帮助..有人可以指导..

4

2 回答 2

0

据我所知,当 JVM 由于内存不足而无法分配更多对象(在您的情况下为字符串)时,就会出现此错误,因为您的程序已经占用了很多内存。请在循环内的某处调用 System.gc() 并检查它是否有效。

于 2013-09-01T05:37:59.547 回答
0

这是我很久以前尝试过的示例, http://www.javacodegeeks.com/2013/01/processing-huge-files-with-java.html 这解决了内存不足异常。

于 2013-09-01T06:02:55.893 回答