我有一個非常巨大的csv文件,我必須使用一些選擇查詢,得到avg,...我不能通過逐行讀取,因爲內存不足。如何使用大的csv文件
下面的代碼在一個簡短的csv文件上很好地工作,但不是很大。 如果您可以編輯此代碼以用於大型csv文件,我將不勝感激。
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Mu {
public void Computemu()
{
String filename="testdata.csv";
File file=new File(filename);
try {
Scanner inputstream=new Scanner(file);//Scanner read only string
// String data=inputstream.next();//Ignore the first line(header)
double sum=0;
double numberOfRating=0;
while (inputstream.hasNext())
{
String data=inputstream.next();//get a whole line
String[] values= data.split(";");//values separate by;
double rating=Double.parseDouble(values[2].replaceAll("\"", ""));//change value to string
if(rating>0)//do not consider implicit ratings
{
sum+=rating;
numberOfRating++;
}
}
inputstream.close();
System.out.println("Mu is"+ (sum/numberOfRating));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
我不明白,爲什麼上面的代碼會導致一個OutOfMemoryError:它只有在一個時間內存一條線 –
掃描儀是否負荷。整個文件首先進入內存?http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html –