2012-03-21 13 views
6

Tengo una aplicación donde estoy procesando 5000 archivos a 6000 archivos durante un ciclo.cómo detectar excepciones y continuar el procesamiento en Java

En un bloque try y catch estoy leyendo el archivo Excel y procesando cada celda individual.

Por supuesto, todos los archivos están en el mismo formato, pero en algunos archivos de los datos de la celda en mayo variar ésta puede contener datos o no

cuando cada vez hay una excepción al procesar el archivo número 100, la todo el proceso se detiene y se lanza una excepción,

Pero no quiero ese escenario, en cambio, si hay una excepción en el 100º archivo, la iteración debe continuar con el archivo 101º. Y al final debería saber qué archivo se procesa con éxito y cuál falla.

excepción que estoy gettng son NumberFormatException y NullPointerExceptions

Cómo entregar ese escenario?

+1

Por favor, muestre su código - hará las respuestas más fáciles y más detalladas. –

+1

Por lo que vale, esta pregunta es muy similar a http://stackoverflow.com/q/9798518/20766 - la diferencia es que la persona que hace la otra pregunta quiere volver a intentar procesar el mismo elemento al tocar una excepción, mientras que usted solo quiere rastrear fallas, pero continúe con el próximo ítem. –

Respuesta

4

Es difícil ser más específico sin ver algo de código, pero esto podría ser un enfoque posible:

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

La idea básica es poner el bloque try-catch dentro de los bucles.

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

La forma en que lo haría es crear un mapa utilizando el nombre de archivo como una llave y en su bucle para cada excepción podría almacenar la excepción prevista en el nombre del archivo. Sabrá qué excepciones capturó y los archivos con los que estaban asociadas.

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: ¡Buena forma de rastrear los archivos no procesados! – Rakesh

+0

+1 para manejar más de 1 de las excepciones lanzadas. Recomiendo agregar un gestor de excepción genérico –

+0

¡Buena idea! Considere usar 'getPath()' o incluso 'getAbsolutePath()' en lugar de 'getName()', que solo devuelve la última parte de la ruta ("el nombre del archivo") y puede conducir a un comportamiento inesperado, si maneja archivos con los mismos nombres de diferentes directorios. –

Cuestiones relacionadas