以块的形式读取文件,然后使用LineNumberReader逐行读取。重复此活动

时间:2013-09-01 05:24:29

标签: java file split buffer line-numbers

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

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

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

我正在使用LineNumberReader,但我认为正在读取整个文件,尽管我提供的条件是当行数达到200000时会中断循环并将这些添加到第三方库中。

相同的代码段:

    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读取文件。然后读取每一行并添加到第三方库。完成后,从(200001-400000)读取另外200000行,然后重复相同的活动。

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

这是我试了很久的例子, http://www.javacodegeeks.com/2013/01/processing-huge-files-with-java.html 这解决了内存不足的问题。