重复标题名称Apache Commons-csv(withAllowDuplicateHeaderNames不起作用)

时间:2019-09-06 10:09:12

标签: csv apache-commons-csv export-csv

我正在使用common-csv库的最新版本,例如在我的 pom.xml 中,我具有以下依赖性:

<dependency>
  <groupId>org.apache.commons</groupId>
  <artifactId>commons-csv</artifactId>
  <version>1.7</version>
</dependency>

此库用于在Java应用程序中编写简单的CSV文件。在特定的使用情况下,可以复制csv文件的列名标题。 我发现CSVFormat类的一个有趣的属性在这种情况下必须有用,但是在下面描述的每个解决方案中,程序都会终止,并显示以下错误:

Exception in thread "main" java.lang.IllegalArgumentException: 
The header contains a duplicate entry: 'VV' in [CC, VV, VV]
  at org.apache.commons.csv.CSVFormat.validate(CSVFormat.java:1676)
  at org.apache.commons.csv.CSVFormat.<init>(CSVFormat.java:793)
  at org.apache.commons.csv.CSVFormat.withHeader(CSVFormat.java:1986)

编写的代码是:

public static void main(String[] args){
    CSVFormat formatCsv = CSVFormat.DEFAULT.withAllowDuplicateHeaderNames()
                                           .withHeader("CC","VV","VV");
    System.out.println(formatCsv);
}

我已经尝试了4种情况:

CSVFormat formatCsv = CSVFormat.DEFAULT.withAllowDuplicateHeaderNames()
                                       .withHeader(headers);

CSVFormat formatCsv = CSVFormat.DEFAULT.withAllowDuplicateHeaderNames(true)
                                       .withHeader(headers);

CSVFormat formatCsv = CSVFormat.DEFAULT.withHeader(headers)
                                       .withAllowDuplicateHeaderNames();

CSVFormat formatCsv = CSVFormat.DEFAULT.withHeader(headers)
                                       .withAllowDuplicateHeaderNames(true);

withAllowDuplicateHeaderNames属性是否存在错误?重写库的代码源以更改CSVFormat.class的验证方法非常困难

1 个答案:

答案 0 :(得分:0)

根据最新发布版本的来源,withAllowDuplicateHeaderNames()当前仅影响从数据本身读取的标头,而不影响您通过withHeader()指定的标头,当前始终检查您指定的标头重复。

这似乎实际上是最新版本的fixed,因此将包含在即将发布的1.8版中,另请参见CSV-241和PR #43

目前的解决方法是从您提供的标头集合中过滤掉那些重复项。