我有一个包含大约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行,然后重复相同的活动。
需要帮助。有人可以指导..
答案 0 :(得分:0)
据我所知,当JVM由于缺少内存而无法分配更多对象(在您的情况下为String)时会出现此错误,因为您的程序已经占用了大量内存。请在循环内的某处调用System.gc()并检查它是否有效。
答案 1 :(得分:0)
这是我试了很久的例子, http://www.javacodegeeks.com/2013/01/processing-huge-files-with-java.html 这解决了内存不足的问题。