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