Apache Commons CSV - 不区分大小写的标头?

时间:2015-04-28 05:53:52

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

Apache CSV实现中是否有内置功能在读取csv时忽略标题大小写?

前段时间我们已经实现了将CSV导出文件转换为SQL的实用程序。为此,我们选择了Apache CSV。到目前为止,一切都很好,但现在我们已经收到了变更请求。

我们处理的所有CSV文件都必须包含标题,现在我们应该以不区分大小写的方式阅读这些标题,因此我们的用户不必付出努力,并观察他们创建的CSV是否遵循我们的标题案例要求。

代码示例:

for (CSVRecord record : subsidiaryRows) {
    String name = record.get(Data.NAME));

其中Data.NAME是

public static final String NAME = "Name";

当用户使用" name"作为他的CSV中的列标题而不是"名称"资本" N"。

我已经关注了API和源代码,但无法找到任何内容。有没有办法如何强制CSVRecord使用CaseInsensitiveMap进行映射或类似的东西?

3 个答案:

答案 0 :(得分:5)

此功能已作为CSV-159

添加到Apache Commons CSV 1.3中

承诺修订1708685。

答案 1 :(得分:0)

我认为您必须在使用apache-commons-csv解析CSV文件之前处理csv标头,您可以使用RandomAccessFile覆盖第一行中的案例(标题)

//convert headers to my 'known' format (ie: lowercase)
RandomAccessFile raf = new RandomAccessFile("C:\\test.csv", "rw");
String firstLine = raf.readLine();
raf.seek(0);
raf.writeBytes(firstLine.toLowerCase());

//your normal process to parse CSV with commons csv

PS:我认为很难以其他方式实现这一点,因为它是一个封闭的api(每个类都是final,而header mapping返回内部头部映射的副本)

答案 2 :(得分:-1)

我没有使用过Apache CSV,但提供以下帮助

Map<String, String> nodeMap = 
    new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER);
相关问题