2012-03-21 11 views
6

Mam aplikację, w której przetwarzam 5000 plików do 6000 plików podczas pętli.jak wychwytywać wyjątki i kontynuować przetwarzanie w Javie

W bloku prób i catch czytam plik Excela i przetwarzam każdą komórkę.

Oczywiście wszystkie pliki są w tym samym formacie, ale w niektórych plikach dane w komórce w mogą się różnić może zawierać dane lub nie

gdy kiedykolwiek istnieje wyjątek podczas przetwarzania 100. plik się Całe przetwarzanie zostanie zatrzymane i zostanie zgłoszony wyjątek,

Ale nie chcę tego scenariusza, zamiast tego, jeśli jest wyjątek w pliku 100., iteracja powinna być kontynuowana z 101. plikiem. I na koniec powinienem wiedzieć, który plik jest przetwarzany pomyślnie, a który nie.

Wyjątek której jestem gettng są NumberFormatException i NullPointerExceptions

Jak ręka, która scenariusz?

+1

Proszę pokazać swój kod - będzie to łatwiejsze i bardziej szczegółowe odpowiedzi. –

+1

Co jest warte, to pytanie jest bardzo podobne do http://stackoverflow.com/q/9798518/20766 - różnica polega na tym, że osoba zadająca inne pytanie chce ponowić przetwarzanie tego samego produktu podczas uderzania wyjątku, podczas gdy chcesz tylko śledzić awarie, ale przejdź do następnego elementu. –

Odpowiedz

4

Trudno być bardziej konkretne, nie widząc trochę kodu, ale może to być możliwe podejście:

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

Podstawowym założeniem jest to, aby umieścić blok try-catch wewnątrz pętli.

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

Sposób, zrobiłbym to, aby stworzyć mapę przy użyciu nazwy pliku jako klucz i w pętli dla każdego wyjątku można przechowywać wyjątek pod nazwą. Wiesz, które wyjątki zostały przechwycone i pliki, z którymi zostały powiązane.

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: Miły sposób śledzenia nieprzetworzonych plików! – Rakesh

+0

+1 za obsługę więcej niż jednego z wyrzucanych wyjątków. Polecam dodać ogólną obsługę wyjątków. –

+0

Dobry pomysł! Rozważ użycie 'getPath()' lub nawet 'getAbsolutePath()' zamiast 'getName()', która zwraca tylko ostatnią część ścieżki ("nazwa pliku") i może prowadzić do nieoczekiwanego zachowania, jeśli obsługujesz pliki z te same nazwy z różnych katalogów. –

Powiązane problemy