どのような状況でjava.util.zip.ZipFile.close()はIOExceptionをスローしますか?そのメソッドシグネチャは、スローできることを示していますが、ソースコードからは、ネイティブコードでない限り、これが発生する可能性のある場所はないようです。その例外がキャッチされた時点で、もしあれば、どのような是正措置を講じることができますか?
4 に答える
このZIPファイルを閉じると、
getInputStream
メソッドの呼び出しによって以前に返されたすべての入力ストリームが閉じられます。
そして、をInputStream.close()
スローするIOException
ので、ZipFile.close()
それもスローする必要があります。のAPIドキュメントにInputStream.close()
よると、 IOException
「I/Oエラーが発生した場合」をスローします。それはあまり説明的ではありませんが、それは広いネットをキャストしています。InputStreamsは、ファイルシステム、ネットワーク、メモリなどからのストリームを表すことができます。InputStreamsには、フラッシュする必要のあるバッファー、閉じる必要のあるソケット、解放する必要のあるリソース、解放する必要のあるロックなどが含まれます。IOExceptionsさまざまな理由で発生します。
男からclose(2):
close()の戻り値をチェックしないことは一般的ですが、それでも深刻なプログラミングエラーです。前のwrite(2)操作のエラーが、最後のclose()で最初に報告される可能性は十分にあります。ファイルを閉じるときに戻り値をチェックしないと、データがサイレントに失われる可能性があります。これは、NFSおよびディスククォータで特に観察できます。
よくわかりませんが、次のいずれかのイベントが発生するとIOExceptionがスローされると思います。
- zipファイルがアプリケーション外の誰かによって削除されました。
- zipファイルを含むドライブがマウント解除/切断されたとき
もっとたくさんのイベントが理由かもしれませんが、私が今考えることができるのはそれらだけです。
のドキュメントは次のようにZipFile.close()
述べています。
このZIPファイルを閉じると、getInputStreamメソッドの呼び出しによって以前に返されたすべての入力ストリームが閉じられます。
おそらく、ネイティブclose
メソッドはInputStreamsのクローズを実行しています。
のclose
メソッドは、チェックされた例外としてInputStream
持っています。IOException
最も可能性の高い原因は、ファイルシステムのスペース不足状態で、基になるファイルシステムでzipファイルが書き込まれているエラーです。原因を特定してその場で回避できない限り、ユーザーに状態を報告するだけです。