gpt4 book ai didi

Java SuperCSV CsvBeanReader 尽管出现错误仍继续

转载 作者:行者123 更新时间:2023-11-30 02:21:16 25 4
gpt4 key购买 nike

我正在尝试读取 CSV 文件,然后根据该 CSV 文件创建一个新对象。我可以使用 SuperCSV 库成功地做到这一点,但如果发生错误(例如特定单元格为空),它会抛出错误(如预期)。我试图收集 ArrayList 中的所有错误,但现在出现第一个异常时,一切都会停止。即使处理器出现错误,如何让 SuperCSV CsvBeanReader 继续下一行?我在 try/catch block 内有循环条件。代码如下:

ArrayList<Duplicate> duplicates = new ArrayList<Duplicate>();
ArrayList<BadProperty> invalidProperties = new ArrayList<BadProperty>();

File convFile = new File(file.getOriginalFilename());
convFile.createNewFile();
FileOutputStream fos = new FileOutputStream(convFile);
fos.write(file.getBytes());
fos.close();

ICsvBeanReader beanReader = null;
try {
beanReader = new CsvBeanReader(new FileReader(convFile), CsvPreference.STANDARD_PREFERENCE);

final String[] header = beanReader.getHeader(true);
final CellProcessor[] processors = getProcessors();

Property property;
while ((property = beanReader.read(Property.class, header, processors)) != null) {
// logic in here


}
}
catch(SuperCsvException e) {
invalidProperties.add(new BadProperty(e.getCsvContext()));
System.out.println(e);

}
finally {
if( beanReader != null ) {
beanReader.close();
}
}

最佳答案

最重要的是将try catch移到循环内部,这样当异常发生时循环不会停止。这是我的做法

private void readProperties()
{
try
{
beanReader = new CsvBeanReader(new FileReader(convFile), CsvPreference.STANDARD_PREFERENCE);

while (readNextProperty())
{
}
}
catch (Exception e)
{
}
finally
{
if(beanReader != null)
{
beanReader.close();
}
}
}

/** Returns true when there are more properties to read. */
private boolean readNextProperty()
{
try
{
Property property = beanReader.read(Property.class, header, processors);
if (property == null)
{
return false;
}

// logic in here

}
catch (SuperCsvException e)
{
invalidProperties.add(new BadProperty(e.getCsvContext()));
System.out.println(e);
}

return true;
}

关于Java SuperCSV CsvBeanReader 尽管出现错误仍继续,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46749706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com