我有一个要求,我需要用引号字符包装所有元素。
我正在使用CSVWriter来编写行
CSVWriter writer = new CSVWriter(new FileWriter(rptFileName),`CSVWriter.DEFAULT_SEPARATOR, CSVWriter.DEFAULT_QUOTE_CHARACTER);
当一个元素是一个空字符串时,它会包装引号,如果它是null,那么它不会引用引号字符。
所以mu输出变得像这样。
"ABC",,"","DEF"
我想要
"ABC","","","DEF"
这里第二个元素是null,第三个元素是空字符串。
OpenCSV中有没有办法在没有人工干预的情况下实现这一目标?
答案 0 :(得分:0)
我不认为你可以用" auto"中的CSVWriter来做到这一点。模式。只需在代码中手动将空""
值分配给null
字符串。
答案 1 :(得分:0)
由于您不想手动更改每一行,可以给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");
无需手动更改输入,即可完成所需操作。
披露:我是这个库的作者,它是开源和免费的(Apache 2.0许可证)
答案 2 :(得分:0)
没有像这样有目的地设计CSVWriter,因此CSVReader可以区分什么是null和什么是空字符串。后来的版本添加了一个CSVReaderNullFieldIndicator,因此用户可以决定什么是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.