[英]OpenCSV CSVWriter does not add quote character for null element
我有一个需要用引号将所有元素包装起来的要求。
我正在使用CSVWriter编写行
CSVWriter writer = new CSVWriter(new FileWriter(rptFileName),`CSVWriter.DEFAULT_SEPARATOR, CSVWriter.DEFAULT_QUOTE_CHARACTER);
当元素为空字符串时,它会包装引号;如果为null,则它不包含引号字符。
所以亩输出变成这样。
"ABC",,"","DEF"
我想要的
"ABC","","","DEF"
在这里,第2个元素为null,第3个元素为空字符串。
OpenCSV中是否有一种无需手动干预即可实现的方法?
我认为您无法在“自动”模式下使用CSVWriter做到这一点。 只需为代码中的null
字符串手动分配空的""
值即可。
由于您不想手动更改每一行,因此可以尝试使用univocity解析器 :
//configure writer
CsvWriterSettings settings = new CsvWriterSettings();
settings.setQuoteAllFields(true);
如果要写行(或行列表):
//create writer with given config and output file
CsvWriter writer = new CsvWriter(new File(rptFileName), "UTF-8", settings);
//get your data from somewhere
List<Object[]> dataToWrite = getDataFromSomewhere();
//write everything.
writer.writeRowsAndClose(dataToWrite);
如果要从ResultSet转储数据:
ResultSet rs = getDataFromSomewhere();
new CsvRoutines(settings).write(rs, new File(rptFileName), "UTF-8");
这将完成您想要的操作,而无需手动更改输入。
披露:我是这个库的作者,它是开源的并且免费的(Apache 2.0许可证)
没有CSVWriter是以这种方式设计的,因此CSVReader可以区分什么是空字符串和什么是空字符串。 更高版本中添加了CSVReaderNullFieldIndicator,以便用户可以确定什么为空(如果为空),但不会将其扩展到CSVWriter。 因此,如果您希望坚持使用openCSV,则必须进行一些手动干预。
如果无法进行手动干预,则可以使用Apache Commons库来帮助您
String[] copyArray = ArrayUtils.clone(originalValues);
for (int i = 0; i < copyArray.size; i++) {
copyArray[i] = StringUtils.defaultString(copyArray[i]);
}
// now use the CSVWriter to write the copyArray.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.