Если у вас есть один и тот же код обработки исключений для IOException
и FileNotFoundException
, вы можете переписать ваш пример более компактным способом только с одним предложением catch
:
try {
InputStream input = new BufferedInputStream(new FileInputStream(file));
try {
// ...
input.read(buffer);
// ...
}
finally {
input.close();
}
}
catch (IOException e) {
e.printStackTrace();
}
Вы можете дажеизбавьтесь от внешнего try-catch
, если вы можете распространить исключение, которое, вероятно, имеет больше смысла, чем ручная печать трассировки стека.Если вы не поймете какое-то исключение в своей программе, вы автоматически получите для себя трассировку стека.
Также необходимость в том, чтобы вручную закрыть поток, будет решена в Java 7 с автоматическим управлением ресурсами .
При автоматическом управлении ресурсами и распространении исключений код сводится к следующему:
try (InputStream input = new BufferedInputStream(new FileInputStream(file))) {
// ...
input.read(buffer);
// ...
}