У меня очень большой файл csv, и я должен использовать некоторый запрос select, получая 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 –