【问题标题】:Why does Apache Commons CSVParser.getHeaderMap() always return null?为什么 Apache Commons CSVParser.getHeaderMap() 总是返回 null?
【发布时间】:2016-06-27 04:03:17
【问题描述】:

使用 Apache Commons CSV 读取以下 TSV sn-p 时:

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 文件有问题吗?图书馆失败了吗?

【问题讨论】:

    标签: java csv apache-commons apache-commons-csv


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢!我在 withHeader() 函数中看到了 may 参数,天真地以为它们只是用来手动设置标题的。
    猜你喜欢
    • 2014-09-12
    • 2019-09-18
    • 2014-09-02
    • 2015-02-27
    • 2021-01-10
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多