Java 7 から、try-with-resources ステートメントを使用できます。
static String readFirstLineFromFile(String path) throws IOException {
try (BufferedReader br =
new BufferedReader(new FileReader(path))) {
return br.readLine();
}
}
ifbr.readLine()
およびbr.close()
both throw exceptionsreadFirstLineFromFile
は、try ブロックから例外をスローし(の例外)、try-with-resources ステートメントの暗黙的な finally ブロックからの例外 ( の例外) を抑制します。br.readLine()
br.close()
この場合、次のようにtry ブロックの例外からメソッドを呼び出すことで、暗黙の finally ブロックから抑制された例外を取得できます。getSuppresed
try {
readFirstLineFromFile("Some path here..."); // this is the method using try-with-resources statement
} catch (IOException e) { // this is the exception from the try block
Throwable[] suppressed = e.getSuppressed();
for (Throwable t : suppressed) {
// Check t's type and decide on action to be taken
}
}
しかし、finally ブロックが使用されている Java 7 よりも古いバージョンで記述されたメソッドを使用する必要があるとします。
static String readFirstLineFromFileWithFinallyBlock(String path) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
if (br != null) br.close();
}
}
次に、br.readLine()
もう一度br.close()
両方が例外をスローすると、状況が逆転します。メソッドはfinally ブロックからの例外 ( の例外)readFirstLineFromFileWithFinallyBlock
をスローし、 try ブロックからの例外 ( の例外) は抑制されます。br.close()
br.readLine()
ここで私の質問は次のとおりです。2 番目のケースで、 try ブロックから抑制された例外を取得するにはどうすればよいでしょうか?
ソース: http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html