Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник Java

try-with-resources

Блок `try`, который сам закрывает открытые ресурсы — файлы, соединения, потоки.

Доступно с: Java 7

Синтаксис

try (Resource r = ...; Resource r2 = ...) {
    ...
} catch (Exception e) {
    ...
}

Примеры

Ресурс закрывается даже при исключении:

class Connection implements AutoCloseable {
    Connection() { IO.println("open"); }
    void query() { throw new IllegalStateException("query failed"); }
    public void close() { IO.println("close"); }
}
 
void main() {
    try (var conn = new Connection()) {
        conn.query();
    } catch (IllegalStateException e) {
        IO.println("caught: " + e.getMessage());
    }
}

Результат:

open
close
caught: query failed

Чтение файла построчно:

void main() throws IOException {
    Path file = Files.createTempFile("demo", ".txt");
    Files.writeString(file, "first\nsecond\n");
    try (BufferedReader reader = Files.newBufferedReader(file)) {
        String line;
        while ((line = reader.readLine()) != null) {
            IO.println(line);
        }
    }
    Files.delete(file);
}

Результат:

first
second

Примечания

Ресурс должен реализовывать AutoCloseable. Несколько ресурсов перечисляются через ; и закрываются в обратном порядке. close() вызывается до блока catch. Если и тело, и close() бросили исключения, исключение из close() не теряется: оно доступно через getSuppressed().

См. также

  • try / catch / finally — Перехватывает исключения; finally выполняется всегда, а try с ресурсами сам их закрывает.
  • AutoCloseable — Интерфейс ресурса, который можно закрыть в try-with-resources.
  • IOException — Проверяемое исключение для ошибок ввода-вывода: файлов, сети, потоков данных.
  • ExecutorService.close() — Закрывает пул и ждёт завершения всех задач; вызывается автоматически в try-with-resources.

Вопросы и ответы по теме

В учебнике

  • try-with-resources — Автоматическое закрытие ресурсов в Java — try-with-resources, интерфейс AutoCloseable, несколько ресурсов, порядок закрытия и подавленные исключения.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.