Правильная обработка исключений при закрытии операций чтения/записи файлов
Что я хочу, так это уменьшить исключения, которые будут создаваться из метода.
Как вы можете видеть, у меня есть внутренний try catch во внешнем блоке catch, чтобы избежать исключения.
Это нормальный способ сделать это или есть лучшие (более элегантные) способы?
Или этот подход полностью ложен, и я должен просто выбросить исключение?
public static String readText(String filename) {
String text = "";
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(filename));
String line = null;
while( (line = br.readLine()) != null ){
text += line;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(br != null)
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return text;
}
3 ответа:
Лично я предпочел бы более современный подход либо с
Files.readAllLines();
, либо сFiles.lines();
.Тогда все, что вам нужно обработать, - это исключение IOException, и ресурсы будут очищены для вас автоматически.
Есть несколько способов быть более кратким в том, что вы хотите сделать:
Используйте функцию Java 7 для перехвата нескольких исключений в одном catch:
try {...} catch(FileNotFoundException | IOException e) {...}
Используйте функцию Java 7 под названием try-with-resources, чтобы вы могли ommit окончательно:
try (BufferedReader br = new BufferedReader(new FileReader(filename))) { }
В отношении выбрасывания исключений или нет-это выбор дизайна:
- Хочу ли я сигнализировать об ошибках на верхний уровень?
- Могу ли я справиться с ошибкой на верхнем уровне?