Java csv 大文件拆分成多个小文件

代码

需要 :javacsv-2.1.jar

package readCSV;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;


import com.csvreader.*;

public class Read {
	
	public static void main(String[] args) {
		read();
	}
	
	
	
	
	public static void read(){

        String filePath = "C:/Users/donald/Desktop/AAA.csv";

        try {
            // 创建CSV读对象
            CsvReader csvReader = new CsvReader(filePath);

            // 读表头
            csvReader.readHeaders();
            System.out.println(csvReader.getHeaders());
            System.out.println(csvReader.getRawRecord());
            System.out.println(csvReader.getDelimiter() );
            
            String[]headers=csvReader.getHeaders();
            int a = 1;//开始以行数
            List<String[]> contents = new ArrayList<>(); // 内容队列
            int b = 20170001;//文件名结尾部分
            String filename ; // 文件名
            
            while (csvReader.readRecord()){
            	if(a % 40000!=0){
                // 读一整行
//                System.out.println(csvReader.getRawRecord());
//                System.out.println(csvReader.getValues()[0]);
                // 读这行的某一列
                // System.out.println(csvReader.get("Vendor"));
                contents.add(csvReader.getValues());
                a++;
            	}else{
            		contents.add(csvReader.getValues());
            		a++;
            		filename ="bbb"+b+".csv";
            		b++;
            		write(filename,headers,contents);
            		contents.clear();
            	}
            }

            // 最后再执行一次
    		filename ="STKFLW-tocml-"+b+".csv";
    		b++;
    		write(filename,headers,contents);
    		System.out.println("最后的文件名:"+filename);
    		System.out.println("最后一行的line_no:"+a);
    		contents.clear();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
	
	public static void write(String filename ,String[] headers,List<String[]> contents){

        String filePath = "C:/Users/donald/Desktop/split/"+filename;

        try {
        	// 创建CSV写对象
            CsvWriter csvWriter = new CsvWriter(filePath,',', Charset.forName("utf-8"));
            //设置内容都用""包起来
            csvWriter.setForceQualifier(true);
            csvWriter.setTextQualifier('"');
            csvWriter.setUseTextQualifier(false);
            
            
            //CsvWriter csvWriter = new CsvWriter(filePath);
            // 写表头
//            String[] headers = {"编号","姓名","年龄"};
//            String[] content = {"12365","张山","34"};
            csvWriter.writeRecord(headers);
            
            //遍历List里面的内容,写在文本里面
            for (String[] content : contents) {  
            csvWriter.writeRecord(content);
            }
            csvWriter.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
	

}

之前由于循环的if 条件写错了,创建了大量空文件csv 文件,一瞬间就几万个文件夹,容易把电脑搞死

猜你喜欢

转载自my.oschina.net/u/3556610/blog/1812975