2012-03-21 19 views
6

ループ中に5000ファイルから6000ファイルを処理するアプリケーションがあります。例外をキャッチしてJavaで処理を続ける方法

try&catchブロックでは、Excelファイルを読み込んで各セルを処理しています。

はもちろん、すべてのファイルが同じ形式であるが、いくつかのファイルでのセル内のデータは、100番目のファイルの処理中に、これまでに例外がある場合、それは

データを含んでいたりしないことがあり 異なる場合があり

しかし、私はこのシナリオを望んでいません。代わりに、100番目のファイルに例外がある場合、101番目のファイルで反復処理を続行する必要があります。 最後に、どのファイルが正常に処理され、どのファイルが失敗したのかを知る必要があります。私はgettngい

例外は、そのシナリオを手にどのよう NumberFormatExceptionNullPointerExceptions

ですか?

+1

コードを表示すると、より簡単で詳細な回答が得られます。 –

+1

これは価値がありますが、この質問はhttp://stackoverflow.com/q/9798518/20766と非常によく似ています。違いは、例外を打つときに同じ項目の処理を再試行したいという質問があることです失敗を追跡したいが、次の項目に進む。 –

答えて

4

それはいくつかのコードを見ることなく、より具体的には難しいのですが、これは可能なアプローチが考えられます。

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

基本的な考え方は、ループ内のtry-catchブロックを置くことです。

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

私はそれを行うような方法は、キーとしてファイル名を使用して地図を作成し、それぞれの例外のためのあなたのループ内でファイル名の下に、例外を格納することができます。あなたが捉えた例外とそれに関連付けられていたファイルを知ることができます。

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:未処理のファイルを追跡するうえで便利です! – Rakesh

+0

+1がスローされた例外の1つ以上を処理します。ジェネリックExceptionハンドラを追加することをお勧めします –

+0

良いアイデア! 'getName()'の代わりに 'getPath()'や 'getAbsolutePath()'を使うことを考えてください。これはパスの最後の部分( "ファイル名")のみを返し、異なるディレクトリから同じ名前。 –

関連する問題