Одна из вещей, которая всегда вызывает у меня проблемы с использованием Readers and Streams в Java, заключается в том, что метод close()
может генерировать исключение. Так как это хорошая идея, чтобы поместить метод close в блок finally, это требует некоторой неудобной ситуации. Обычно я использую эту конструкцию:
FileReader fr = new FileReader("SomeFile.txt");
try {
try {
fr.read();
} finally {
fr.close();
}
} catch(Exception e) {
// Do exception handling
}
Но я также видел эту конструкцию:
FileReader fr = new FileReader("SomeFile.txt");
try {
fr.read()
} catch (Exception e) {
// Do exception handling
} finally {
try {
fr.close();
} catch (Exception e) {
// Do exception handling
}
}
Я предпочитаю первую конструкцию, потому что есть только один блок catch, и это кажется более элегантным. Есть ли причина предпочесть вторую или альтернативную конструкцию?
UPDATE: изменилось бы это, если бы я указал, что оба read
и close
генерируют только IOExceptions? Поэтому мне кажется, что если сбой чтения не удастся, то по той же причине произойдет сбой.