import com.alibaba.excel.annotation.ExcelProperty;
import com.eg.cdt.saas.operator.common.util.StringUtils;
import com.eg.cdt.saas.pay.dao.dto.AutoWithdrawalExportDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.junit.jupiter.params.shadow.com.univocity.parsers.csv.CsvWriter;
import org.junit.jupiter.params.shadow.com.univocity.parsers.csv.CsvWriterSettings;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@Slf4j
public class CsvExportUtil {
/**
*
* @param clazz
* @param dataList 数据源
* @param csvWriter
* @return
*/
public static CsvWriter writeCSV(Class<?> clazz, List<?> dataList,CsvWriter csvWriter){
List<Object> titleName=new ArrayList<>();
List<String> titleColumn=new ArrayList<>();
try {
// 获取标题和列名
Field[] fields = clazz.getDeclaredFields();
List<Field> fieldList = Arrays.stream(fields)
.filter(field -> {
ExcelProperty annotation = field.getAnnotation(ExcelProperty.class);
if (annotation != null) {
field.setAccessible(true);
return true;
}
return false;
}).collect(Collectors.toList());
fieldList.forEach(e->{
titleName.add(e.getAnnotation(ExcelProperty.class).value()[0]);
titleColumn.add(e.getName());
});
//写入标题
csvWriter.writeHeaders(titleName);
//组装行数据
for (int index = 0; index < dataList.size(); index++) {
Object obj = dataList.get(index);
Class cla = obj.getClass();
String str[] = new String[titleColumn.size()];
for (int columnIndex = 0; columnIndex < titleColumn.size(); columnIndex++) {
String title = titleColumn.get(columnIndex);
if (!"".equals(title)) {
// 获取返回类型
String UTitle = Character.toUpperCase(title.charAt(0)) + title.substring(1); // 使其首字母大写;
String methodName = "get" + UTitle;
Method method = cla.getDeclaredMethod(methodName);
String returnType = method.getReturnType().getName();
Object object = method.invoke(obj);
//获取到数据
String data = method.invoke(obj) == null ? "" : object.toString();
if (StringUtils.isNotEmpty(data) && Date.class.getName().equals(returnType)) {
str[columnIndex]=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(object);
} else{
//组装数据
str[columnIndex]=data;
}
}
}
//打印一行
csvWriter.writeRow(str);
}
csvWriter.flush();
csvWriter.close();
} catch (Exception e) {
e.printStackTrace();
log.error("CsvExportUtil:导出Csv异常");
}
return csvWriter;
}
public static void main(String[] args) throws IOException {
List<AutoWithdrawalExportDTO> datalist = new ArrayList<>();
AutoWithdrawalExportDTO data=new AutoWithdrawalExportDTO();
data.setOperatorName("张三");
data.setFrontNo("222");
data.setCustomPayAmt(new BigDecimal("0.00"));
datalist.add(data);
AutoWithdrawalExportDTO data1=new AutoWithdrawalExportDTO();
data1.setOperatorName("李四");
data1.setFrontNo(null);
data1.setCustomPayAmt(new BigDecimal("6.66"));
datalist.add(data1);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
CsvWriter csvWriter = new CsvWriter(bos, "UTF-8",new CsvWriterSettings());
CsvExportUtil.writeCSV(AutoWithdrawalExportDTO.class,datalist,csvWriter);
bos.close();
FileUtils.writeByteArrayToFile(new File("e:\\exportCsv\\1.csv"),bos.toByteArray());
}
}
csv文件导出
最新推荐文章于 2024-05-22 18:44:09 发布