我尝试使用 Supercsv 解析 csv 文件。我使用一些“捕获异常”来消除结构或数据错误的行。
所有行都通过 do / while 循环处理。但是如果第一行导致异常(正则表达式...),则 read() 方法的返回值为 null,这会导致 while 循环停止。
我怎样才能通过保持坏线的消除来避免这种情况?
这是代码:
CsvPreference LSP_PREFERENCE = new CsvPreference.Builder(' ', ';', "\n").build();
beanReader = new CsvBeanReader(new InputStreamReader(new FileInputStream(fileToTreat), "ISO-8859-1"), LSP_PREFERENCE);
CsvPreference LSP_PREFERENCE = new CsvPreference.Builder(' ', ';', "\n").build();
beanReader = new CsvBeanReader(new InputStreamReader(new FileInputStream(fileToTreat), "ISO-8859-1"), LSP_PREFERENCE);
treatedOk = true;
ucdr = null;
do {
try {
ucdr = beanReader.read(ConvergeDataRow.class, headers, processors);
if (ucdr != null) {
rdata.add(ucdr); // contains list of row data.
}
} catch (SuperCsvConstraintViolationException ex) {
logger.log(Level.SEVERE, "NON CORRECT VALUE ENCOUNTERD ON ROW "+beanReader.getRowNumber(), ex);
treatedOk = false;
} catch (SuperCsvCellProcessorException ex){
logger.log(Level.SEVERE, "PARSER EXCEPTION ON ROW "+beanReader.getRowNumber(), ex);
treatedOk = false;
} catch (org.supercsv.exception.SuperCsvException ex){
logger.log(Level.SEVERE, "ERROR ON ROW "+beanReader.getRowNumber(), ex);
treatedOk = false;
}
} while (ucdr != null);treatedOk = true;
一个厄运的解决方案是强制 ucdr 为 null 的其他值。但肯定有更好的方法...
你可以帮帮我吗?