首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenCSV引用空值

OpenCSV引用空值
EN

Stack Overflow用户
提问于 2018-06-29 00:17:21
回答 2查看 3.5K关注 0票数 4

使用OpenCSV库,将StatefulBeanToCsv.write()调用为null值是用引号包装的。

示例:

代码语言:javascript
复制
String[] columns = new String[] {
    "Col1",
    "Col2",
    "Col3"
};

ColumnPositionMappingStrategy strat = new ColumnPositionMappingStrategy();
strat.setColumnMapping(columns);

Writer writer = new FileWriter(outputFilePath);
StatefulBeanToCsv beanToCsv = new StatefulBeanToCsvBuilder(writer)
        .withMappingStrategy(strat)
        .build();
beanToCsv.write(items);
writer.close();

将产生:

1,"",3

当我期待:

"1",,"3"

我还没有通过.withApplyQuotesToAll(true)为所有字段设置引号。

如果我确实使用了.withApplyQuotesToAll(true),我就会

"1","","3"

在某种程度上,这个库似乎与此正好相反:

OpenCSV CSVWriter does not add quote character for null element

如何将空值写入空/空值,而不是空字符串?

EN

回答 2

Stack Overflow用户

发布于 2018-06-29 00:26:05

看起来,您提到的不调用的方法实际上需要一个布尔值。你试过以下几种方法吗?

代码语言:javascript
复制
.withApplyQuotesToAll(false)
票数 2
EN

Stack Overflow用户

发布于 2021-03-12 14:40:56

有办法做到这一点。设置.withApplyQuotesToAll(false)告诉OpenCSV只引用具有特殊字符的元素,但是我们可以更改OpenCSV理解的内容,像这样扩展CSVWrite类:

代码语言:javascript
复制
public class CustomCsvWriter extends CSVWriter {

    public CustomCsvWriter(Writer writer) {
        super(writer);
    }

    @Override
    protected boolean stringContainsSpecialCharacters(String line) {
        return !line.isEmpty();
     }
}

因此,您可以创建这样的StatefulBeanToCsv:

代码语言:javascript
复制
new StatefulBeanToCsvBuilder<>(new CustomCsvWriter(writer))
   .withMappingStrategy(strat)
   .withApplyQuotesToAll(false)
   .build();

用OpenCSV 5.3测试

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51092696

复制
相关文章

相似问题

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