Java源码示例:com.univocity.parsers.common.processor.BeanWriterProcessor
示例1
/**
* 将数据库的数据导出为CSV
*
* @param file 导出的文件
* @param sourceClass 读取数据库数据时对应的Bean
* @param targetClass 写入文件时对应的Bean
* @param sourceList 数据库查到的数据
*/
@SneakyThrows(IOException.class)
public static <F, T> void toFile(Path file, Class<F> sourceClass, Class<T> targetClass, List<F> sourceList) {
if (Files.notExists(file)) {
Files.createFile(file);
}
Copier<F, T> copier = Copiers.create(sourceClass, targetClass);
List<T> data = sourceList.parallelStream().map(copier::copy).collect(Collectors.toList());
//List转换CSV处理器
BeanWriterProcessor<T> writerProcessor = new BeanWriterProcessor<>(targetClass);
writerProcessor.setStrictHeaderValidationEnabled(true);
//CSV写入设置
CsvWriterSettings settings = Csv.writeExcel();
//设置处理器
settings.setRowWriterProcessor(writerProcessor);
try (OutputStream os = Files.newOutputStream(file, CREATE, TRUNCATE_EXISTING, WRITE);
OutputStreamWriter osw = new OutputStreamWriter(os)) {
CsvWriter writer = new CsvWriter(osw, settings);
writer.processRecordsAndClose(data);
}
}
示例2
public boolean writeBeanToFixedWidthFile(List<Product> products, String outputPath) {
try (Writer outputWriter = new OutputStreamWriter(new FileOutputStream(new File(outputPath)), "UTF-8")) {
BeanWriterProcessor<Product> rowProcessor = new BeanWriterProcessor<Product>(Product.class);
FixedWidthFields fieldLengths = new FixedWidthFields(8, 30, 10);
FixedWidthWriterSettings settings = new FixedWidthWriterSettings(fieldLengths);
settings.setHeaders("product_no", "description", "unit_price");
settings.setRowWriterProcessor(rowProcessor);
FixedWidthWriter writer = new FixedWidthWriter(outputWriter, settings);
writer.writeHeaders();
for (Product product : products) {
writer.processRecord(product);
}
writer.close();
return true;
} catch (IOException e) {
logger.error(e.getMessage());
return false;
}
}
示例3
private static <T> void writeRecords(Writer writer, List<T> beans, Class<T> aClass) {
FixedWidthWriterSettings settings = new FixedWidthWriterSettings();
settings.setWriteLineSeparatorAfterRecord(true);
BeanWriterProcessor<T> processor = new BeanWriterProcessor<>(aClass);
settings.setRowWriterProcessor(processor);
new FixedWidthWriter(writer, settings).processRecords(beans);
}