为什么Apache Commons CSVParser.getHeaderMap()总是返回null?

tri*_*oid 6 java csv apache-commons apache-commons-csv

使用Apache Commons CSV阅读以下TSV代码段时:

Name    DOB SIN Address, contact information
"Patience Middleton"    "18-4-87"   720463771   "varius Cras sem aliquam taciti fames hendrerit tempor"
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

CSVFormat format = CSVFormat.newFormat('\t').withQuote('"');
CSVParser parsed = CSVParser.parse(csvData, format);
List<CSVRecord> record = parsed.getRecords();
System.out.println(parsed.getHeaderMap().toString());
Run Code Online (Sandbox Code Playgroud)

但是我总是得到一个NullPointerException说明parsed.getHeaderMap() == null.

根据API(https://commons.apache.org/proper/commons-csv/apidocs/org/apache/commons/csv/CSVParser.html),该方法可能会返回在列中迭代的标题映射的副本订购.

我的代码或CSV文件中有什么问题吗?图书馆失败了吗?

Sve*_*ung 13

默认情况下,CSVParser假定没有标题行并将第一行解析为常规数据.您需要明确地告诉它,你希望你的CSV文件的第一行被解释为通过调用一个标题withHeader()CSVFormat:

CSVParser parsed = CSVParser.parse(csvData, 
   CSVFormat.newFormat('\t').withQuote('"').withHeader());
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢!我在withHeader()函数中看到了参数,并天真地认为它们仅用于手动设置标题. (2认同)