Если работаете с
BufferedReader, InputStream, OutputStream, FileReader, соединениями или другими ресурсами, которые нужно закрывать, используйте try-with-resources.Плохо:
BufferedReader reader = new BufferedReader(new FileReader("data.txt"));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
На первый взгляд всё нормально.
Но если внутри чтения файла вылетит исключение,
reader.close() может не выполниться. В итоге останутся открытые file handles, stream’ы или соединения.Лучше так:
try (BufferedReader reader =
new BufferedReader(new FileReader("data.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
try-with-resources автоматически вызовет close() даже при исключении.Почему это важно:
* не нужен ручной
finally* меньше boilerplate-кода
* ниже риск утечек ресурсов
* код проще читать
* безопаснее работать с файлами, сетью и БД
Правило простое:
если объект реализует
AutoCloseable или Closeable, почти всегда стоит использовать try-with-resources.Это одна из тех привычек, которые делают Java-код чище и надёжнее.
