读取上百万行的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; }}