【发布时间】:2012-11-27 14:02:16
【问题描述】:
我想我发现了一个错误。也可能不是,但 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)
你觉得我应该怎么做?
我不希望整个应用程序崩溃,只是因为某一行搞砸了,我宁愿跳过那一行。
【问题讨论】: