2016-12-05 6 views
0

新しいメソッドをプログラムに追加する必要があるため、このzipフォルダにアクセスする必要があります。最初のメソッドは、Webサイトからダウンロードし、Fileオブジェクトを返します。ZipFileを作成するには初期化が必要ですが、初期化には例外処理が必要です

私の方法では、これをZipFileオブジェクトに変更したいと考えています。私はちょうどFileを取り込み、そのFileを使ってZipFileオブジェクトを作成し、それを返したいと思っています。

これで問題ないですが、ZipFileオブジェクトを作成すると、未処理のIOExceptionが存在します。しかし、私はtry/catchを置く場合、私はZipFileを返すことはできません。だから私はまずそれを作成し、試してキャッチしますが、ZipFileが初期化されていないことを私に伝えます。私の考え方に欠けているものや、これをどのように並べ替えることができるかについてのアイデアは何ですか?

私のコードは次のようになります。

ZipFile zipTestData; 

try { 
    zipTestData = new ZipFile(testData) 
}catch (IOException io) 
    log.debug(io.toString()); 
}catch(Exception e) { 
    log.debug(e.toString()); 
} 

return zipTestData; 
+0

は、スタックトレースを共有します。 – sidgate

答えて

2

例外を「飲み込む」べきではありません。例外が発生した場合は、呼び出し元が処理できるように例外を渡す必要があります。さもなければ、呼び出し側は操作が失敗したことをどのように知るでしょうか?ジッパーができない場合

ZipFile zipTestData = null; 

try { 
     zipTestData = new ZipFile(testData) 
} catch (IOException io) 
    log.debug(io.toString()); 
} catch(Exception e) { 
    log.debug(e.toString()); 
} 

return zipTestData; 

これはZipFileの代わりに、呼び出し元にnullを返します。呼び出し側がそうのように、正確に結果を処理する用意がある場合はまた、あなたが説明した手法を使用することができ

何らかの理由で作成されたものです。

その特定の場合には、あなただけのようにも

try { 
     return new ZipFile(testData) 
} catch (IOException io) 
    log.debug(io.toString()); 
} catch(Exception e) { 
    log.debug(e.toString()); 
} 

return null; 

を書くことができ、が、あなたが得るエラーの原因はローカル変数は宣言時にデフォルトで初期化さではないということです。したがって、ローカル変数(ZipFile zipTestData;)を宣言すると、値は割り当てられません。その後、実行時にnew ZipFile(testData)に例外がスローされた場合、変数は割り当てられず、returnは割り当てられていない変数の値を返そうとします。 Javaでは、これは禁止されています。

1

おそらく、 ZipFile zipTestData = nullを初期化する必要があります。 stacktraceを使用しない場合これは私が把握できるものです

関連する問題