繁体   English   中英

OpenCSV CSVWriter不会为空元素添加引号字符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM