【发布时间】:2022-12-05 16:20:30
【问题描述】:
我正在使用 OpenCSV 将 Java bean 写入 CSV 文件。这是代码 sn-p:
public void generateCSVFile(List<?> domains, String[] columns, String fileName) {
try {
final FileWriter writer = new FileWriter(fileName);
CSVWriter csvWriter = new CSVWriter(writer);
csvWriter.writeNext(columns);
if (CollectionUtils.isNotEmpty(domains)) {
ColumnPositionMappingStrategy mappingStrategy = new ColumnPositionMappingStrategy();
mappingStrategy.setType(Class.forName(domains.get(0).getClass().getTypeName()));
mappingStrategy.setColumnMapping(columns);
StatefulBeanToCsvBuilder<?> builder = new StatefulBeanToCsvBuilder(
csvWriter);
StatefulBeanToCsv beanWriter = builder.withMappingStrategy(mappingStrategy).build();
beanWriter.write(domains);
csvWriter.close();
writer.close();
}
}
catch(Exception e){
LOG.error("Exception occured while generating CSV file : {}", e)
}
}
这适用于 opencsv 4.1 版。这生成了一个 CSV 文件,其中的标题和列按照我传递列 (String[]) 的顺序排列。最近,我将版本更新到 5.7.1,之后它生成的 CSV 文件只包含标题而不包含数据。它生成一个空文件,生成的文件中只有标题。
我试过使用HeaderColumnNameMappingStrategy。它生成包含数据的文件,但按属性的升序排列,并且属性为大写,因为这是默认行为。
有没有办法让ColumnPositionMappingStrategy 与 5.7.1 版一起工作,就像它在 4.1 版中一样?
【问题讨论】:
-
你确定
domains不是空的? -
是的。域列表不为空。
标签: java csv serialization opencsv