- > exportDataList = new ArrayList<>();
List
二、csv工具
Csv即逗号分隔值,也可以称为字符分隔符,「与excel等文件相比,excel文件中会包含许多格式信息,占用的空间会更大,所以Csv在很多大数据场景导出、导入场景是非常常见的。该工具实现采用的是开源的univocity-parsers框架实现。」
之前有一篇专门讲解轮子之王项目为何使用univocity-parsers框架集成csv的详细过程,有兴趣的读者可以点击链接查看:集成csv工具的前因后果
「部分源码如下:」
/**
* 使用实体bean接收csv数据文件并进行数据落盘
*
* @param inputStream
* @param errorList
* @param rowDtoClass
* @param rowAction
* @param
*/
public static void importCsvWithBean(InputStream inputStream, List errorList, Class rowDtoClass, ThrowingConsumer> rowAction) {
// 定义bean解析者:用于将csv中数据绑定到实体属性中,然后存储带list集合上
BeanListProcessor rowProcessor = new BeanListProcessor<>(rowDtoClass);
CsvParserSettings setting = getDefaultSetting(errorList);
setting.setProcessor(rowProcessor);
// 创建csv文件解析
CsvParser csvParser = new CsvParser(setting);
csvParser.parse(inputStream);
// 获取数据映射后的集合
List dataList = rowProcessor.getBeans();
// 校验必填字段
for (T row : dataList) {
// 校验导入字段
ImportValid.validRequireField(row, errorList);
}
// 执行数据持久化
persistentBeanDataToDb(dataList, rowAction);
}
/**
* 导出csv文件(表头和行都以实体的方式)
*
* @param response
* @param head
* @param rowDataList
*/
public static void exportCsvWithBean(HttpServletResponse response, String fileName, T head, List rowDataList) {
CsvWriter writer = null;
try {
// 设置响应头格式
response.setContentType(ExportConstant.EXCEL_CONTENT_TYPE);
response.setCharacterEncoding(ExportConstant.UTF_8);
response.setHeader(ExportConstant.CONTENT_DISPOSITION, ExportConstant.ATTACHMENT_FILENAME + fileName + ExportConstant.CSV_SUFFIX);
// 设置导出格式
CsvWriterSettings setting = getDefaultWriteSetting();
// 创见bean处理器,用于处理写入数据
BeanWriterProcessor<?> beanWriter = new BeanWriterProcessor<>(head.getClass());
setting.setRowWriterProcessor(beanWriter);
// 导出数据
writer = new CsvWriter(response.getOutputStream(), setting);
writer.processRecords(rowDataList);
writer.flush();
} catch (Exception e) {
log.error("CsvExportUtil exportCsvWithBean in error:{}", e);
} finally {
if (Objects.nonNull(writer)) {
writer.close();
}
}
}
「使用案例如下:」