java读取创建csv文件

前言

一直都觉得csv操作比较复杂,今天刚知道插件unicocity-parsers处理csv这么简单,所以记录一下


1.引入univocity

代码如下(示例):

	<dependency>
       <groupId>com.univocity</groupId>
        <artifactId>univocity-parsers</artifactId>
        <version>2.8.4</version>
    </dependency>

2.读取csv,将csv转成List文件

代码如下(示例):

public static <T> List parseCsvFile(MultipartFile file) {
	  CsvParserSettings settings = new CsvParserSettings();
	  // 默认会对列重新排序
      // 禁用后,所有列会按照文件中定义的顺序输出
      // 未选择的字段不会解析,输出null
	  settings.setColumnReorderingEnabled(false);
	  // csv文件有头信息
	  settings.setHeaderExtractionEnabled(true);
	  // 换行方式
	  settings.getFormat().setLineSeparator("\n");
	  // 为每个指定配置创建一个解析器实例
	  CsvParser parser = new CsvParser(settings);
	  InputStreamReader reader = new InputStreamReader(file.getInputStream(), "UTF-8");
	  // 送入列处理器
	  parser.parse(reader);
	  // 最后,得到列解析的值
	  List<T> dataList = rowProcessor.getBeans();
	
	  return dataList;
}

3.创建csv文件

代码如下(示例):

public static File createCsvFile(String[] header, List<Object> data, String fileName) {
	CsvWriter csvWriter = null;
	try
    {
		File csvFile = new File(fileName);
	    File parent = csvFile.getParentFile();
	    if (parent != null && !parent.exists())
	    {
	        parent.mkdirs();
	    }
        csvFile.createNewFile();
        Writer fileWriter = new FileWriter(csvFile);
        CsvWriterSettings settings = new CsvWriterSettings();
		settings.getFormat().setLineSeparator("\n");
        CsvWriter writer = new CsvWriter(fileWriter, settings);

        // 创建csv头部信息
        writer.writeHeaders(header);

        // 生成数据
        writer.processRecords(data);
        return csvFile;
    } catch (Exception ex) {
        throw ex;
    } finally {
        if (writer!= null) {
            writer.close();
        }
    }

}

如果想在浏览器直接下载csv,就不需要生成csv文件,只需要生成文件流
代码如下(示例):

public static byte[] createCsv(String[] header, List<Object> data, String fileName) {
	ByteArrayOutputStream baos = new ByteArrayOutputStream();
    CsvWriter csvWriter = null;
    try {
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(baos, StandardCharsets.UTF_8)));
        Writer fileWriter = new FileWriter(csvFile);
        CsvWriterSettings settings = new CsvWriterSettings();
		settings.getFormat().setLineSeparator("\n");
        CsvWriter writer = new CsvWriter(bw , settings);

        // 创建csv头部信息
        writer.writeHeaders(header);

        // 生成数据
        writer.processRecords(data);
        bw.flush();
        bw.close();
        return baos.toByteArray();
    } catch (Exception ex) {
        throw ex;
    } finally {
        if (writer!= null) {
            writer.close();
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值