使用OpenCSV库,将StatefulBeanToCsv.write()调用为null值是用引号包装的。
示例:
String[] columns = new String[] {
"Col1",
"Col2",
"Col3"
};
ColumnPositionMappingStrategy strat = new ColumnPositionMappingStrategy();
strat.setColumnMapping(columns);
Writer writer = new FileWriter(outputFilePath);
StatefulBeanToCsv beanToCsv = new StatefulBeanToCsvBuilder(writer)
.withMappingStrategy(strat)
.build();
beanToCsv.write(items);
writer.close();将产生:
1,"",3
当我期待:
"1",,"3"
我还没有通过.withApplyQuotesToAll(true)为所有字段设置引号。
如果我确实使用了.withApplyQuotesToAll(true),我就会
"1","","3"
在某种程度上,这个库似乎与此正好相反:
OpenCSV CSVWriter does not add quote character for null element
如何将空值写入空/空值,而不是空字符串?
发布于 2018-06-29 00:26:05
看起来,您提到的不调用的方法实际上需要一个布尔值。你试过以下几种方法吗?
.withApplyQuotesToAll(false)发布于 2021-03-12 14:40:56
有办法做到这一点。设置.withApplyQuotesToAll(false)告诉OpenCSV只引用具有特殊字符的元素,但是我们可以更改OpenCSV理解的内容,像这样扩展CSVWrite类:
public class CustomCsvWriter extends CSVWriter {
public CustomCsvWriter(Writer writer) {
super(writer);
}
@Override
protected boolean stringContainsSpecialCharacters(String line) {
return !line.isEmpty();
}
}因此,您可以创建这样的StatefulBeanToCsv:
new StatefulBeanToCsvBuilder<>(new CustomCsvWriter(writer))
.withMappingStrategy(strat)
.withApplyQuotesToAll(false)
.build();用OpenCSV 5.3测试
https://stackoverflow.com/questions/51092696
复制相似问题