首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCSV CSVWriter不会为空元素添加引号字符

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

Stack Overflow用户
提问于 2017-06-23 04:00:48
回答 3查看 2.3K关注 0票数 3

我有一个要求,我需要用引号字符包装所有元素。

我正在使用CSVWriter编写代码

代码语言:javascript
复制
CSVWriter writer = new CSVWriter(new FileWriter(rptFileName),`CSVWriter.DEFAULT_SEPARATOR, CSVWriter.DEFAULT_QUOTE_CHARACTER);

当一个元素是一个空字符串时,它会将引号括起来,如果它是null,那么它就不会添加引号字符。

所以µ输出是这样的。

"ABC",,"","DEF"

我想要的是

"ABC","","","DEF"

这里第二个元素是空的,第三个元素是空字符串。

在OpenCSV中,有没有一种方法可以在不需要手动干预的情况下实现这一点?

EN

回答 3

Stack Overflow用户

发布于 2017-06-23 04:12:29

我不认为你可以在“自动”模式下使用CSVWriter做到这一点。只需在代码中为null字符串手动分配空的""值即可。

票数 0
EN

Stack Overflow用户

发布于 2017-06-23 12:53:22

由于您不想手动更改每一行,因此可以尝试使用univocity-parsers

代码语言:javascript
复制
//configure writer
CsvWriterSettings settings = new CsvWriterSettings();
settings.setQuoteAllFields(true);

如果要写入行(或行列表):

代码语言:javascript
复制
//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转储数据:

代码语言:javascript
复制
ResultSet rs = getDataFromSomewhere();
new CsvRoutines(settings).write(rs, new File(rptFileName), "UTF-8");

这将做您想要的,而不需要手动更改您的输入。

披露:我是这个库的作者,它是开源的,免费的(Apache2.0许可)

票数 0
EN

Stack Overflow用户

发布于 2017-06-29 12:58:48

不,CSVWriter是故意这样设计的,这样CSVReader就可以区分什么是null,什么是空字符串。后来的版本增加了一个CSVReaderNullFieldIndicator,这样用户就可以决定什么是null (如果有null),但是相同的东西没有扩展到CSVWriter。因此,如果您希望继续使用openCSV,则必须进行一些手动干预。

如果无法进行手动干预,您可以使用Apache Commons库来帮助您解决问题

代码语言:javascript
复制
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. 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44708379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档