1.csv 文件解析入库方法(少量)
private boolean doProcessNew(FileInputStream fileInputStream) {
int i = 0;
long start = Calendar.getInstance().getTimeInMillis();//开始时间,单位是毫秒
ArrayList<JtComplaintPredictionResultEntity> csvFileList = new ArrayList<>();
try (CSVReader csvReader = new CSVReaderBuilder(new BufferedReader(new InputStreamReader(fileInputStream, "UTF-8"))).build()) {
log.info("开始解析csv文件");
Iterator<String[]> iterator = csvReader.iterator();
List<String> badList = new ArrayList<>();
// iterator.next(); //跳过表头
//创建一个集合用于存储csv文件读取出来的所有数据
while (iterator.hasNext()) {
String[] next = iterator.next();//获取每一行的数据
if(next!=null&&next[0]!=null){
String str = JSON.toJSONString(next);
str = str.substring(2,str.length()-2).replace("\",\"",",");
JtComplaintPredictionResultEntity crd = new JtComplaintPredictionResultEntity();
List<String> list = Arrays.asList(str.split("\\|"));
if(i==0){
//表头
log.info("第"+i+":::"+ JSON.toJSONString(list) );
}else {
crd.setAccount( list.get(0));
crd.setAccountTv( list.get(1 ));
crd.setPred( list.get(2 ));
crd.setGreaterThanT( list.get(3 ));
csvFileList.add(crd);
}
i++;
}else{
log.info("文件第"+i+1+"行,无数据插入");
}
}
jtService.saveBatch(csvFileList);
long end1 = Calendar.getInstance().getTimeInMillis();//结束时间
double spentTime0 = (double) end1 - start; //末减初就是所花时间
log.info("数据插入完毕,成功插入::"+csvFileList.size()+" 条数据,实际处理时间:"+spentTime0);
return true;
} catch (Throwable e) {
log.info("解析失败:"+e);
e.printStackTrace();
return false;
}
}
2.csv 文件解析入库方法(大量)
应将数据集合拆分多组少量数据集,多线程调用入库。可使用list提供的方法
List<List<PCard>> partition= Lists.partition(csvFileList,3000);
3.csv生成(少量)
map0.put("startrow","0");
map0.put("endrow","50");
long startTime = System.currentTimeMillis();
List<Map<String,Object>> listEx=dao.listJtComplaintPrediction(map0);
log.info("共计查询数据:"+listEx.size()+"条,耗时:" + (System.currentTimeMillis() - startTime));
/*将数据封装csv 文件*/
StringBuffer buffer = new StringBuffer();
buffer.append(
"account|"+
"tv_account|"+
"care_num"
);
buffer.append(System.getProperty("line.separator"));
for(Map map:listEx){
buffer.append(
map.get("ACCOUNT") + "|"+
map.get("CARE_NUM")
);
buffer.append(System.getProperty("line.separator"));
}
//创建文件
String filename = "_LIST_"+dateNow+".csv";
File file = writeTxtFile(filename, buffer.toString());
log.info("生成文件:"+file.getName());
4.csv生成(大量)
应将数据分页查询,多线程调用存入对象
网友评论