2016-03-11 4 views
2

При чтении следующего TSV фрагмент с Apache Commons CSV:Почему Apache Commons CSVParser.getHeaderMap() всегда возвращает null?

Name DOB SIN Address, contact information 
"Patience Middleton" "18-4-87" 720463771 "varius Cras sem aliquam taciti fames hendrerit tempor" 

Это мой код:

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

Однако я всегда получаю NullPointerException о том, что parsed.getHeaderMap() == null.

В соответствии с API (https://commons.apache.org/proper/commons-csv/apidocs/org/apache/commons/csv/CSVParser.html) метод может возвращать копию карты заголовка, которая повторяется в порядке столбцов.

В моем коде или CSV-файле есть что-то неправильное? Ошибка библиотеки?

ответ

8

По умолчанию CSVParser предполагает, что нет строки заголовка и анализирует первую строку как обычные данные. Вы должны сказать ему прямо, что вы хотите, чтобы первая строка файла CSV интерпретировалась как заголовок, вызвав withHeader() на CSVFormat:

CSVParser parsed = CSVParser.parse(csvData, 
    CSVFormat.newFormat('\t').withQuote('"').withHeader()); 
+2

Спасибо большое! Я видел параметры в функции withHeader() и наивно думал, что они используются только для ручного набора заголовков. – tribbloid