JAVA通过Hutool解析CSV文件

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

​开箱即用!

导入依赖

cn.hutool

hutool-all

5.7.10

首先看下本地CSV文件的处理

1.导出到本地路径路径

String path2 = "/Users/jeckwu/Desktop/test/test.csv";

// 导出csv文件到指定路径

@Test

public void exportDataToCsvFileOfPath(){

List 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 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> 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> mapList = new ArrayList<>();

List header = read.getHeader();

List rows = read.getRows();

for (CsvRow row : rows) {

Map 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 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。

相关链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: