2017-10-14 45 views
0

我正在嘗試讀取CSV文件,然後根據該CSV文件創建一個新對象。我可以成功地用SuperCSV庫做到這一點,但如果發生錯誤(如特定的單元格爲空),則會引發錯誤(如預期的那樣)。我試圖收集一個ArrayList中的所有錯誤,但現在在第一個異常時,一切都將停止。即使處理器出現錯誤,如何讓SuperCSV CsvBeanReader繼續到下一行?我有try/catch塊內的循環條件。代碼如下:Java SuperCV CsvBeanReader儘管出錯仍然繼續

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(); 
     } 
    } 

回答

1

最重要的是移動循環內的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; 
} 
相關問題