java csv大文件_Java csv 大文件拆分成多个小文件

代码

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 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 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 文件,一瞬间就几万个文件夹,容易把电脑搞死

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值