java写入csv,解决数据错位问题

  1.  java写入csv,可以使用下面的方法

public String uploadCsv(JSONObject map,String Id, JSONArray idRecordList, String date,String[] tag) {
      //开启日志,不要可以省略

      LOGGER.info("目标:" + Id + ",共需上传:" + 1 + "个文件。");
      String strategy_id = map.getString("strategy_id");
      //创建本地目录
      File file = FileUtil.mkdir(System.getProperty("user.dir") + File.separator + "data" + File.separator + date);
       //创建目录下的临时文件
      File tmp = new File(file.getPath() + File.separator   +Id + ".csv");
      //设置编码
      CsvWriter writer = CsvUtil.getWriter(tmp, CharsetUtil.CHARSET_UTF_8);
      try {
         //写表头字段名
         String[] headers ={
              
         };

         writer.write(headers);
        //循环数据
         for (int i = 0; i < idRecordList.size(); i++) {
            JSONObject record = idRecordList.getJSONObject(i);
            String[] rs = new String[headers.length];

            for (int j = 0; j < headers.length; j++) {
               String key = headers[j];
         
            }
            writer.write(rs);
         }
           //这里文件就已经在本地生成了
      } catch (Exception e) {
          e.printStackTrace();
       
      } finally {
         writer.flush();
         writer.close();

      }
   }

2.调用上面方法导出

但在导出时,有时会遇到一个问题,这个是我踩的比较大的坑,就是bbb的值出现在了name的值后面,导致后面的数据错位,如下图所示:

       debugger发现每个字段都获取到对应的值了,但是写入的时候出现了这种情况,我把bbb从第三列设置在第四列,发现第三列的值依旧写入在了第二列的单元格里,因此问题不是后面的字段,而是第二列的字段,最后我得出了两种解决办法:

  •  将第二列换到导出的最后一列,就是写headers时写在最后一个,这样就不会有数据添加在它的单元格里,这个就是不要求导出列的顺序的情况下可采用
  • 第二个就是在获取第二列的值时,记得添加"\n"换行符,这种方式不会影响导出的列顺序
for (int j = 0; j < headers.length; j++) {
					String key = headers[j];
					if (key.equals("id")) {
						rs[j] = record.getString(key);
					} else if (key.equals("name")) {
						rs[j] = record.getString(key)+"\n";
}

 

问题就成功解决啦 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值