关于java:Apache Commons CSV – 不区分大小写的标头?

Apache Commons CSV - case insensitive headers?

ApacheSv实现中是否有一个内置功能,在读取csv时忽略头大小写?

不久前,我们已经实现了将csv导出文件转换为sql的实用程序。为此,我们选择了ApacheSv。到现在为止一切都很好,但现在我们有一个变更请求。

我们处理的所有csv文件都必须包含头文件,现在我们应该以不区分大小写的方式读取这些头文件,这样我们的用户就不必在其中花费他们的精力,并且观察他们创建的csv是否符合头文件大小写的要求。

代码示例:

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

其中data.name是

1
public static final String NAME ="Name";

当用户使用csv中的"name"作为列标题,而不是大写"n"的"name"时,问题显然会出现。

我跟踪了api和source,但找不到任何东西。有没有一种方法可以强制CSVRecord使用caseinsensitivemap进行映射或类似的操作?


此功能作为csv-159添加到Apache Commons csv 1.3中。

承诺修订1708685。


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

1
2
3
4
5
6
7
//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(每个类都是最终的,头映射返回内部头映射的副本)。


我没有使用apache csv,但是下面有帮助吗

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