我需要处理具有重复标题的CSV文件,每个数据分为三列(min,max和avg),但每列的标题相同。第一列是min,第二列是average,第三列是max。
Apache CSV解析器抛出:
java.lang.IllegalArgumentException: The header contains a duplicate name:
如何配置解析器以接受重复的标头?
答案 0 :(得分:6)
CSVParser
中没有预定义的配置参数来控制是否可以接受重复的列名。
查看源代码显示initializeHeader
方法创建Map
,其中列名称为键,列索引为值。如果要使用标头映射,则列名必须是唯一的。
但是,有一个解决方案:
指定CSVFormat
,忽略CSV文件第一行定义的列名称,define your column names manually。
定义列名称
要定义要用于访问记录的列名,请写:
CSVFormat.EXCEL.withHeader("Col1", "Col2", "Col3");
致电
withHeader(String...)
,您可以使用给定的名称来解决CSVRecord
中的值,并假设您的CSV源不包含也定义列名的第一条记录。如果是,那么您将使用您的姓名覆盖此元数据,并且应使用withSkipHeaderRecord(boolean)
调用true
来跳过第一条记录。
答案 1 :(得分:3)
现在可以将CSVParser配置为允许重复的标题。
Capota