私は以下のtryブロックを持っていて、以前クローズ可能なfsが作成されています。tryブロックにリソースが作成されていないリソースで試してください
最終的にクローズするか、明示的に閉じる必要はありますか?
try (BufferedReader reader = new BufferedReader(new InputStreamReader(fs.open(path)))) {
...
}
私は以下のtryブロックを持っていて、以前クローズ可能なfsが作成されています。tryブロックにリソースが作成されていないリソースで試してください
最終的にクローズするか、明示的に閉じる必要はありますか?
try (BufferedReader reader = new BufferedReader(new InputStreamReader(fs.open(path)))) {
...
}
リソースは、左から右の順で初期化されていることがわかりました。リソースが初期化に失敗した場合(つまり、初期化子式が例外をスローする場合)、try-with-resourcesステートメントによってこれまでに初期化されたすべてのリソースが閉じられます。すべてのリソースが正常に初期化されると、tryブロックは通常どおり実行され、try-with-resourcesステートメントの非nullリソースはすべて閉じられます。
リソースは、初期化されたのと逆の順序で閉じられます。リソースは、null以外の値に初期化された場合にのみクローズされます。 1つのリソースのクローズからの例外は、他のリソースのクローズを防ぎません。以前にイニシャライザ、tryブロック、またはリソースのクローズによって例外がスローされた場合、そのような例外は抑制されます。
唯一のインスタンスはブロックが宣言の逆の順序で閉鎖されResourceSpecificationに宣言する。
fs
がの試用リソースの前に宣言されているので、このインスタンスは閉じられません。
これは詳細な記述があるため、答えとしてマークします。 – user432024
する必要がありますように!それは良い答えです。 upvoteをしてください。 – Bathsheba
reader.close()
のみが呼び出されます。概念的には、プログラム制御が}
に到達する直前であり、これにはtry
ブロックに例外がスローされた場合も含まれます。
しかし、通常の方法でfs
を処理する必要があります。あなたができる
しかし、彼はブロック内の別々のソースとして 'fs'を宣言できず、以下のソースにそれを使用できませんでしたか? – SomeJavaGuy
私は、ポイントは、fsが外部でインスタンス化されたことです。 – user432024
fsとは何ですか?リソース内試行括弧内で**宣言されたすべてのリソースは、後で閉じられます。 finallyブロックで手動で閉じる場合と同じ効果があります。ブロック自体の前または内部で宣言されたすべてのリソースは自動的に閉じられません。 'Autoclosable'インターフェースを実装するすべてのオブジェクトは、try-with-resourcesで使用できます。詳細はこちら[try-with-resources](https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html) –
これはHadoop FSですが、そのtryブロックに到達する前に作成されています。 – user432024