2012-03-21 19 views
6

Ho un applicativo in cui sto elaborando 5000 file in 6000 file durante un ciclo.come rilevare le eccezioni e continuare l'elaborazione in Java

In un blocco try and catch sto leggendo il file excel e l'elaborazione di ogni singola cella.

Naturalmente tutti i file sono nello stesso formato, ma in alcuni file i dati nella cella in possono variare esso può contenere dati o no

quando mai v'è un'eccezione durante l'elaborazione di file 100, il l'intera elaborazione viene interrotta e viene generata un'eccezione,

Ma non voglio quello scenario, invece se c'è un'eccezione al 100 ° file, l'iterazione dovrebbe continuare con il 101 ° file. E alla fine dovrei sapere quale file viene processato con successo e quale è fallito.

eccezione che sto gettng sono NumberFormatException e NullPointerExceptions

Come a portata di mano questo scenario?

+1

Si prega di mostrare il codice - renderà le risposte più facili e più dettagliate. –

+1

Per quello che vale, questa domanda è molto simile a http://stackoverflow.com/q/9798518/20766 - la differenza è che la persona che fa l'altra domanda vuole riprovare a processare lo stesso oggetto quando colpisce un'eccezione, mentre tu vuoi solo tenere traccia dei guasti, ma continua con l'elemento successivo. –

risposta

4

E 'difficile essere più precisi senza vedere un po' di codice, ma questo potrebbe essere un possibile approccio:

public void processFiles(List<File> fileList) 
{ 
    for (File thisFile : fileList) { 
     try { 
      processOneFile(thisFile); 
     } 
     catch (Exception ex) { 
      printLogMessage(thisFile.getName()); 
     } 
    } 
} 
7

L'idea di base è quella di mettere il blocco try-catch all'interno dei cicli.

for (File file : files) { 
    try { 
     parseExcelFile(file); // Do whatever you want to do with the file 
    } 
    catch (Exception e) { 
     logger.warn("Error occurs while parsing file : " + file, e); 
    } 
} 
5

Il modo in cui lo farei è quello di creare una mappa utilizzando il nome del file come una chiave e nel vostro ciclo per ciascuna eccezione è possibile memorizzare l'eccezione sotto il nome del file. Sapresti quali eccezioni hai catturato e i file con cui sono stati associati.

Map fileExceptions = new HashMap<String, Exception>(); 

for(File file : files){ 
    try{ 
     <file processing> 
    } 
    catch(NumberFormatException e){ 
     fileExceptions.put(fileName, e); 
    } 
    catch(NullPointerException e){ 
     fileExceptions.put(fileName, e); 
    } 
} 
+0

+1: bel modo per tenere traccia dei file non elaborati! – Rakesh

+0

+1 per gestire più di 1 delle eccezioni generate. Ti consiglierò di aggiungere un gestore di eccezioni generico –

+0

Buona idea! Prendi in considerazione l'uso di 'getPath()' o anche 'getAbsolutePath()' invece di 'getName()', che restituisce solo l'ultima parte del percorso ("il nome del file") e può portare a comportamenti imprevisti, se gestisci i file con gli stessi nomi da diverse directory. –

Problemi correlati