读取上百万行的csv文件,由于数据量太大,一次性将csv的内容读取出来,保存在内存中,会导致内存严重吃不消,最后直接宕机,所以建议采取分批次读数据然后保存数据库中,以下是简单测试方法,可根据具体需求做修改。对大批量数据的操作,建议用jdbc直接批量添加,修改,删除等操作。
import java.util.List;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;public class ReadCsv {
public static void main(String[] args) throws FileNotFoundException{
File csv = new File("D:\\test.csv"); // CSV文件路径
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(csv));
String line = "";
while ((line = br.readLine()) != null){ //读取到的内容给line变量
while(getList(br)){}
}
} catch (IOException e){
e.printStackTrace();
}
}
public static boolean getList(BufferedReader br){
List<String[]> allString = new ArrayList<>();
boolean status = false;
String everyLine = "";
try {
int index = 0;
while((everyLine = br.readLine()) != null){
String [] strList = everyLine.split(",");
System.out.println(everyLine);
allString.add(strList);
index ++;
if(index == 3){
status = true;
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("总条数为:"+ allString.size());
//取值
for (int i = 0; i < allString.size(); i++) {
System.out.println(allString.get(i)[0]);
}
//这里做新增操作,保存到数据库。。。。。。
return status;
}
}