JAVA通过Hutool解析CSV文件【导入即用,无需封装】

JAVA通过Hutool解析CSV文件

​ Java解析CSV方式有很多种方式【javaCSV(未更新),openCSV(apache)】,这篇文章主要是用到Hutool工具类,能快速的解析读取,不需要过多的封装。

开箱即用!

导入依赖

<dependency>
  <groupId>cn.hutool</groupId>
  <artifactId>hutool-all</artifactId>
  <version>5.7.10</version>
</dependency>
首先看下本地CSV文件的处理
1.导出到本地路径路径
String path2 = "/Users/jeckwu/Desktop/test/test.csv";

// 导出csv文件到指定路径
@Test
public void exportDataToCsvFileOfPath(){
  List<TILockdataMidModel> allLockData = tiLockdataMidMapper.getAllLockData();
  // 业务处理
  // 可以把list转map
  //指定路径和编码
  CsvWriter writer = CsvUtil.getWriter(path2, CharsetUtil.CHARSET_UTF_8);
  //按行写出
  writer.writeBeans(allLockData);
}
2.解析本地路径下的CSV文件
// 解析本地csv文件
@Test
public void analysisLocalCsvFileByPath(){
    final CsvReader reader = CsvUtil.getReader();
    //假设csv文件在classpath目录下
    final List<TILockdataMidModel> result = reader.read(
            ResourceUtil.getUtf8Reader(path2), TILockdataMidModel.class);
    log.info("====>{}",result.size());
    log.info("====>{}", JSON.toJSONString(result));
}
页面上的CSV文件导入导出处理
3.Web端导入且解析CSV文件
// 读取csv中的数据
public static List<Map<String,Object>> csvImport(MultipartFile file) throws IOException {
  //2. 进行配置
  CsvReadConfig csvReadConfig=new CsvReadConfig();
  // 是否跳过空白行
  csvReadConfig.setSkipEmptyRows(true);
  // 是否设置首行为标题行
  csvReadConfig.setContainsHeader(true);
  //构建 CsvReader 对象
  CsvReader csvReader = CsvUtil.getReader(csvReadConfig);
  // 这里转了下 可能会产生临时文件,临时文件目录可以设置,也可以立马删除
  CsvData read = csvReader.read(multipartFile2File(file), CharsetUtil.CHARSET_GBK);
  List<Map<String,Object>> mapList = new ArrayList<>();
  List<String> header = read.getHeader();
  List<CsvRow> rows = read.getRows();
  for (CsvRow row : rows) {
    Map<String,Object> map = new HashMap<>();
    for (int i = 0; i < row.size(); i++) {
      map.put(header.get(i),row.get(i));
    }
    // 具体业务根据需求来就行了
    if (!ObjectUtils.isEmpty(map.get("mlos单号")))
      mapList.add(map);
  }
  return mapList;
}

 /**
  * multipartFile转File
  **/
public static File multipartFile2File(MultipartFile multipartFile){
  File file = null;
  if (multipartFile != null){
    try {
      file=File.createTempFile("tmp", null);
      multipartFile.transferTo(file);
      System.gc();
      file.deleteOnExit();
    }catch (Exception e){
      e.printStackTrace();
      log.warn("multipartFile转File发生异常:"+e);
    }
  }
  return file;
}
4.Web端导出CSV文件
@RequestMapping("/exportCsvFileTest")
public void exportCsvFileTest(HttpServletResponse response) throws IOException {
    // 获取业务数据 一般放到service处理
    List<TILockdataMidModel> allLockData = tiLockdataMidMapper.getAllLockData();
    // 业务处理完成把数据写到流中 响应到页面上
    response.setCharacterEncoding("UTF-8");
    response.setHeader("Content-Disposition", "attachment;filename=" + new String("exportCsvFileTest.csv".getBytes(StandardCharsets.UTF_8), "ISO8859-1"));
    response.setContentType(ContentType.APPLICATION_OCTET_STREAM.toString());
    CsvWriter csvWriter = CsvUtil.getWriter(response.getWriter());
    csvWriter.writeBeans(allLockData);
    csvWriter.close();
}

详细的API可以去看官方文档,Hutool官网:https://www.hutool.cn/

如果需求比较复杂可以尝试openCSV。

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值