From 22262387f66187cf202bc55206e1a359a2b85d03 Mon Sep 17 00:00:00 2001 From: jueyue Date: Thu, 31 Oct 2019 13:43:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9csv=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E6=96=B9=E5=BC=8F,=E7=94=A8=E4=BA=8E=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=88=86=E6=AE=B5=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../afterturn/easypoi/csv/CsvExportUtil.java | 28 +++++--- .../easypoi/csv/export/CsvExportService.java | 67 +++++++++++++++---- 2 files changed, 74 insertions(+), 21 deletions(-) diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/csv/CsvExportUtil.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/csv/CsvExportUtil.java index b904b25..c424fdb 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/csv/CsvExportUtil.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/csv/CsvExportUtil.java @@ -4,6 +4,7 @@ import cn.afterturn.easypoi.csv.entity.CsvExportParams; import cn.afterturn.easypoi.csv.export.CsvExportService; import cn.afterturn.easypoi.excel.entity.params.ExcelExportEntity; +import java.io.FileOutputStream; import java.io.OutputStream; import java.util.Collection; import java.util.List; @@ -15,14 +16,16 @@ import java.util.List; */ public final class CsvExportUtil { + private CsvExportService cs; + /** * @param params 表格标题属性 * @param pojoClass Excel对象Class - * @param dataSet Excel对象数据List */ - public static void exportCsv(CsvExportParams params, Class pojoClass, - Collection dataSet, OutputStream outputStream) { - new CsvExportService().createCsv(outputStream, params, pojoClass, dataSet); + public static CsvExportUtil exportCsv(CsvExportParams params, Class pojoClass, OutputStream outputStream) { + CsvExportUtil ce = new CsvExportUtil(); + ce.cs = new CsvExportService(outputStream, params, pojoClass); + return ce; } /** @@ -30,10 +33,19 @@ public final class CsvExportUtil { * * @param params 表格标题属性 * @param entityList Map对象列表 - * @param dataSet Excel对象数据List */ - public static void exportCsv(CsvExportParams params, List entityList, - Collection dataSet, OutputStream outputStream) { - new CsvExportService().createCsvOfList(outputStream, params, entityList, dataSet); + public static CsvExportUtil exportCsv(CsvExportParams params, List entityList, OutputStream outputStream) { + CsvExportUtil ce = new CsvExportUtil(); + ce.cs = new CsvExportService(outputStream, params, entityList); + return ce; + } + + public CsvExportUtil write(Collection dataSet) { + this.cs.write(dataSet); + return this; + } + + public void close() { + this.cs.close(); } } diff --git a/easypoi-base/src/main/java/cn/afterturn/easypoi/csv/export/CsvExportService.java b/easypoi-base/src/main/java/cn/afterturn/easypoi/csv/export/CsvExportService.java index b7f34d1..7739711 100644 --- a/easypoi-base/src/main/java/cn/afterturn/easypoi/csv/export/CsvExportService.java +++ b/easypoi-base/src/main/java/cn/afterturn/easypoi/csv/export/CsvExportService.java @@ -9,6 +9,7 @@ import cn.afterturn.easypoi.exception.excel.ExcelExportException; import cn.afterturn.easypoi.exception.excel.enums.ExcelExportEnum; import cn.afterturn.easypoi.util.PoiPublicUtil; import org.apache.commons.lang3.builder.ReflectionToStringBuilder; +import org.apache.poi.util.IOUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -26,30 +27,33 @@ public class CsvExportService extends BaseExportService { private static final Logger LOGGER = LoggerFactory.getLogger(CsvExportService.class); + private CsvExportParams params; + private List excelParams; + private Writer writer; + /** * 导出Csv类文件 * * @param outputStream 输出流 * @param params 输出参数 * @param pojoClass 输出类 - * @param dataSet 集合 */ - public void createCsv(OutputStream outputStream, CsvExportParams params, Class pojoClass, Collection dataSet) { + public CsvExportService(OutputStream outputStream, CsvExportParams params, Class pojoClass) { if (LOGGER.isDebugEnabled()) { LOGGER.debug("CSV export start ,class is {}", pojoClass); } - if (params == null || pojoClass == null || dataSet == null) { + if (params == null || pojoClass == null) { throw new ExcelExportException(ExcelExportEnum.PARAMETER_ERROR); } try { List excelParams = new ArrayList(); // 得到所有字段 - Field[] fields = PoiPublicUtil.getClassFields(pojoClass); - ExcelTarget etarget = pojoClass.getAnnotation(ExcelTarget.class); - String targetId = etarget == null ? null : etarget.value(); + Field[] fields = PoiPublicUtil.getClassFields(pojoClass); + ExcelTarget etarget = pojoClass.getAnnotation(ExcelTarget.class); + String targetId = etarget == null ? null : etarget.value(); getAllExcelField(params.getExclusions(), targetId, fields, excelParams, pojoClass, null, null); - createCsvOfList(outputStream, params, excelParams, dataSet); + createCsvOfList(outputStream, params, excelParams); } catch (Exception e) { LOGGER.error(e.getMessage(), e); throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, e.getCause()); @@ -60,13 +64,23 @@ public class CsvExportService extends BaseExportService { * @param outputStream 输出流 * @param params 输出参数 * @param excelParams 列参数 - * @param dataSet 集合参数 */ - public void createCsvOfList(OutputStream outputStream, CsvExportParams params, List excelParams, Collection dataSet) { + public CsvExportService(OutputStream outputStream, CsvExportParams params, List excelParams) { + createCsvOfList(outputStream, params, excelParams); + } + + /** + * @param outputStream 输出流 + * @param params 输出参数 + * @param excelParams 列参数 + */ + private CsvExportService createCsvOfList(OutputStream outputStream, CsvExportParams params, List excelParams) { try { Writer writer = new BufferedWriter(new OutputStreamWriter(outputStream, params.getEncoding())); - + this.params = params; + this.excelParams = excelParams; + this.writer = writer; dataHandler = params.getDataHandler(); if (dataHandler != null && dataHandler.getNeedHandlerFields() != null) { needHandlerList = Arrays.asList(dataHandler.getNeedHandlerFields()); @@ -77,9 +91,32 @@ public class CsvExportService extends BaseExportService { if (params.isCreateHeadRows()) { writer.write(createHeaderRow(params, excelParams)); } + return this; + } catch (Exception e) { + LOGGER.error(e.getMessage(), e); + throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, e.getCause()); + } + } + + /** + * 导出Csv类文件 + * + * @param dataSet 集合 + */ + public CsvExportService write(Collection dataSet) { + try { + return writerData(dataSet); + } catch (Exception e) { + LOGGER.error(e.getMessage(), e); + throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, e.getCause()); + } + } + + private CsvExportService writerData(Collection dataSet) { + try { Iterator iterator = dataSet.iterator(); - String line = null; - int i = 0; + String line = null; + int i = 0; while (iterator.hasNext()) { Object obj = iterator.next(); line = createRow(excelParams, params, obj); @@ -90,7 +127,7 @@ public class CsvExportService extends BaseExportService { i++; } writer.flush(); - writer.close(); + return this; } catch (Exception e) { LOGGER.error(e.getMessage(), e); throw new ExcelExportException(ExcelExportEnum.EXPORT_ERROR, e.getCause()); @@ -151,4 +188,8 @@ public class CsvExportService extends BaseExportService { private String getLineMark() { return "\n"; } + + public void close() { + IOUtils.closeQuietly(this.writer); + } }