java 生成时间格式的csv文件_Java生成Csv文件

本文介绍了如何使用Apache Commons CSV库在Java中创建CSV文件。通过一个定时任务从数据库获取数据,然后将数据转换为CSV格式,并写入到指定文件路径。示例代码展示了如何构建POJO类、自定义工具类以及测试数据的生成过程。
摘要由CSDN通过智能技术生成

背景

和第三方对接,需要我们做一个定时任务,每周捞取一次数据库特定表并生成CSV上传至特定路径,因此有了这篇文章。

本文主要利用commons-csv工具包来生成的。

依赖(当前时间最新版本)

maven

org.apache.commons

commons-csv

1.8

gradle

compile group: 'org.apache.commons', name: 'commons-csv', version: '1.8'

pojo

@Data

@NoArgsConstructor

@AllArgsConstructor

public class CsvMetadata {

private String id;

private String name;

private String phone;

}

自定义工具类

@Log4j2

public class CsvHelper {

/**

* note : when invoke this method, the metadatas list field's value should have the right order in order to matching

* the header's fields

*/

public void writeCsvFile(String[] header, List> metadatas, String filePath) {

try (CSVPrinter printer = CSVFormat.DEFAULT.withHeader(header)

.print(new PrintWriter(

filePath))) {

for (List metadata : metadatas) {

printer.printRecord(metadata);

}

printer.flush();

} catch (IOException e) {

log.error("generate csv file failed", e);

throw new RuntimeException("generate csv file failed");

}

}

}

测试

public class TestGenerateCsv {

private static final String[] headers = new String[]{"id", "name", "phone"};

public static void main(String[] args) {

List metaDatas = Lists.newLinkedList();

List> datas = Lists.newArrayList();

// 1. 模拟数据

for (int i = 0; i < 10; i++) {

CsvMetadata data = new CsvMetadata(UUID.randomUUID().toString(), "name" + i,

String.valueOf(Math.random()).substring(2, 13));

metaDatas.add(data);

}

// 2. 构造业务数据

metaDatas.forEach(it -> {

List linkedList = Lists.newLinkedList();

linkedList.add(it.getId() + "");

linkedList.add(it.getName());

linkedList.add(it.getPhone());

datas.add(linkedList);

});

CsvHelper helper = new CsvHelper();

helper.writeCsvFile(headers, datas, "test.csv");

}

}

结果

9a137bab9863

image.png

说明:工具类比较简单,传入的参数需要用户先构造好的,当然可以通过反射利用注解丰富CsvHelper类,只传入List对调用者更友好,这个笔者没有实现,读者可自行实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值