我有一个要求,我需要用引号字符包装所有元素。
我正在使用CSVWriter编写代码
CSVWriter writer = new CSVWriter(new FileWriter(rptFileName),`CSVWriter.DEFAULT_SEPARATOR, CSVWriter.DEFAULT_QUOTE_CHARACTER);当一个元素是一个空字符串时,它会将引号括起来,如果它是null,那么它就不会添加引号字符。
所以µ输出是这样的。
"ABC",,"","DEF"
我想要的是
"ABC","","","DEF"
这里第二个元素是空的,第三个元素是空字符串。
在OpenCSV中,有没有一种方法可以在不需要手动干预的情况下实现这一点?
发布于 2017-06-23 04:12:29
我不认为你可以在“自动”模式下使用CSVWriter做到这一点。只需在代码中为null字符串手动分配空的""值即可。
发布于 2017-06-23 12:53:22
由于您不想手动更改每一行,因此可以尝试使用univocity-parsers:
//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");这将做您想要的,而不需要手动更改您的输入。
披露:我是这个库的作者,它是开源的,免费的(Apache2.0许可)
发布于 2017-06-29 12:58:48
不,CSVWriter是故意这样设计的,这样CSVReader就可以区分什么是null,什么是空字符串。后来的版本增加了一个CSVReaderNullFieldIndicator,这样用户就可以决定什么是null (如果有null),但是相同的东西没有扩展到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. https://stackoverflow.com/questions/44708379
复制相似问题