Ответ
Явное закрытие ресурсов (файлов, сетевых соединений, потоков ввода-вывода) критически важно по нескольким причинам:
- Предотвращение утечек ресурсов: Неосвобожденные дескрипторы файлов или сокеты остаются занятыми, что может привести к ошибке
java.io.IOException: Too many open files. - Освобождение системных ресурсов: Операционная система выделяет ограниченное количество ресурсов на процесс.
- Гарантия записи данных: Для буферизованных потоков (например,
BufferedWriter) вызовclose()гарантирует сброс буфера и физическую запись данных. - Снятие блокировок: Открытый файл может быть заблокирован для записи другими процессами.
Best Practice в Java 7+: Используйте try-with-resources для автоматического закрытия любых ресурсов, реализующих интерфейсы AutoCloseable или Closeable.
try (FileInputStream fis = new FileInputStream("data.bin");
BufferedReader reader = new BufferedReader(new InputStreamReader(fis))) {
String line = reader.readLine();
// Работа с ресурсами
} // fis и reader будут закрыты автоматически здесь, даже при исключении
Почему это работает: Блок try-with-resources неявно добавляет блок finally, который вызывает close() для всех объявленных ресурсов в обратном порядке их инициализации.