我想我发现了一个错误。或者可能不是,但 Super CSV 不能很好地处理。
我正在使用 MapReader 解析具有 41 列的 CSV 文件。但是,我得到了那个 CSV - 给我 CSV 的 Web 服务弄乱了一行。“标题”行是一个制表符分隔的行,有 41 个单元格。
而“错误行”是一个制表符分隔的行,有 36 个单元格,内容没有任何意义。
这是我正在使用的代码:
InputStream fis = new FileInputStream(pathToCsv);
InputStreamReader inReader = new InputStreamReader(fis, "ISO-8859-1");
ICsvMapReader mapReader = new CsvMapReader(inReader, new CsvPreference.Builder('"','\t',"\r\n").build());
final String[] headers = mapReader.getHeader(true);
Map<String, String> row;
while( (row = mapReader.read(headers)) != null ) {
// do something
}
在上面提到的行中执行 mapReader.read(headers) 时出现异常。这是一个例外:
org.supercsv.exception.SuperCsvException:
the nameMapping array and the sourceList should be the same size (nameMapping length = 41, sourceList size = 36)
context=null
at org.supercsv.util.Util.filterListToMap(Util.java:121)
at org.supercsv.io.CsvMapReader.read(CsvMapReader.java:79)
at test.MyClass.readCSV(MyClass.java:20)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
你觉得我应该怎么做 ?
我不希望整个应用程序崩溃,只是因为一行搞砸了,我宁愿跳过那一行。