美文网首页
csv文件生成与读取

csv文件生成与读取

作者: Yluozi | 来源:发表于2023-10-04 17:05 被阅读0次

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生成(大量)

应将数据分页查询,多线程调用存入对象

相关文章

网友评论

      本文标题:csv文件生成与读取

      本文链接:https://www.haomeiwen.com/subject/triybdtx.html