なぜキャッチIOExceptionがこのような状況で必要とされます

Code_Control_jxie0755:

私が使用して、この例を見てFileInuputStreamFileOutputStream

try (FileInputStream in = new FileInputStream("./TestDir/IOfile.txt");
     FileOutputStream out = new FileOutputStream("./TestDir/IOfile_out.txt")) {

    // Do something...

} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

私が言うの部分を省略し// Do something...、これらすべての操作がなくなっていても、この問題が発生しますので、。

コンストラクタ以来FileInputStreamFileOutputStream捨てることがFileNotFoundExceptionキャッチなぜ、私が理解することができますFileNotFoundException

しかし、捕獲のためのベースは何ですかIOExceptionコンパイラが、それはそれなしでは動作せず、私はこれが必要とされていることを知っている可能性がどのように知っていないようです。

全おかげでガイ:

例外は、から来ているclose()あなたはのメソッドシグネチャを見れば、この方法close()FileInputStream/ FileOutputStream

public void close() throws IOException 

これは、チェック例外のためのthrows節があるIOExceptionあなたがそれを処理する必要があるので、。また、あなたがしよう-と、リソースを使用しているので、あなたが明示的にクローズされていないとして、これは明らかでないブロック。

開かれたリソースtryブロックを呼び出すことによって自動的に閉じられているcloseリソースがインタフェースを実装している提供し、それを終了するときの方法をAutoClosebleそうでなければ、試し-リソースと、それらを使用することはできません。

あなたは呼び出さない場合close()に(悪いです)メソッドFileInputStream/ FileOutputStream、あなたが対処する必要はありませんIOException、以下の罰金をコンパイルします:

 try {
        FileInputStream in = new FileInputStream("./TestDir/IOfile.txt");
        FileOutputStream out = new FileOutputStream("./TestDir/IOfile_out.txt");

        byte[] buffer = new byte[100];
        // more operations
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

そして、あなたはfinallyブロックでは、適切なリソースを閉じた場合:

 try {
        in = new FileInputStream("./TestDir/IOfile.txt");
        out = new FileOutputStream("./TestDir/IOfile_out.txt");

        byte[] buffer = new byte[100];
        // more operations
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }finally{
        try {
            if(in!=null && out!= null) {
                in.close();
                out.close();
            }
        }catch (IOException io){
            io.printStackTrace();
        }
    }

あなたはそれを処理する必要があります。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=233350&siteId=1