我正在使用 Super CSV 来验证 csv 文件。
我得到了行号,listReader.getRowNumber()
但是有没有一种方法可以让我得到存在验证错误的列号?
你当然可以。Super CSV 抛出的SuperCsvExceptiongetContext()
有一个方法,该方法在抛出异常时返回CsvContext(您需要在调用周围进行 try/catch read()
)。
这包含许多有用的信息,包括:
此外,您还可以调用 CsvReader 的getUntokenizedRow()方法来获取 CSV 的原始未标记行。
例如
ICsvListReader listReader = null;
try {
listReader = new CsvListReader(new FileReader(CSV_FILENAME),
CsvPreference.STANDARD_PREFERENCE);
listReader.getHeader(true); // skip the header
final CellProcessor[] processors =
new CellProcessor[]{new Optional(), new ParseInt()};
List<Object> row;
while( (row = listReader.read(processors)) != null ) {
System.out.println(String.format("lineNo=%s, rowNo=%s, row=%s",
listReader.getLineNumber(), listReader.getRowNumber(), row));
}
} catch (final SuperCsvException e){
// here's what you're after!
final CsvContext context = e.getContext();
System.out.println(String.format(
"something went wrong on lineNo=%s, rowNo=%s, colNo=%s",
context.getLineNumber(),
context.getRowNumber(),
context.getColumnNumber()));
} finally {
if( listReader != null ) {
listReader.close();
}
}
更新:
查看您添加的代码后,您似乎想要捕获验证异常,而不仅仅是知道列号。如果是这样,你应该看看这个问题。