Apache Commons CSV - 不区分大小写 headers?

Apache Commons CSV - case insensitive headers?

Apache CSV 实现中是否有 built-in 功能以在读取 csv 时忽略 header 大小写?

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

我们处理的所有 CSV 文件都必须包含 headers,现在我们应该以不区分大小写的方式读取那些 headers,这样我们的用户就不必费力观看了如果他们创建的 CSV 符合我们的 header 案例要求。

代码示例:

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

其中 Data.NAME 是

public static final String NAME = "Name";

当用户在他的 CSV 中使用 "name" 作为列 header 而不是使用大写 "N".

的 "Name" 时,问题显然会出现

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

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

Map<String, String> nodeMap = 
    new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER);

我认为您必须为了方便而处理 csv headers,在使用 apache-commons-csv 解析 CSV 文件之前,您可以使用 RandomAccessFile 来覆盖第一行中的大小写( headers)

//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(每个 class 都是最终的,而 headers 映射returns 一份内部 headers 地图)

此功能已作为 CSV-159

添加到 Apache Commons CSV 1.3

已提交修订版 1708685。