Encodera

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

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

Справочник Java

UncheckedIOException

Непроверяемая обёртка над `IOException` — нужна там, где проверяемые исключения запрещены, например в лямбдах.

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

Синтаксис

public class UncheckedIOException extends RuntimeException
public UncheckedIOException(String message, IOException cause)

Параметры

ПараметрТипОписание
messageStringТекст ошибки.
causeIOExceptionИсходное проверяемое исключение.

Примеры

Ошибка ввода-вывода внутри лямбды:

String read(Path p) {
    try {
        return Files.readString(p);
    } catch (IOException e) {
        throw new UncheckedIOException("Cannot read " + p, e);
    }
}
 
void main() {
    try {
        Stream.of("missing.txt").map(Path::of).map(this::read).toList();
    } catch (UncheckedIOException e) {
        IO.println(e.getMessage());
        IO.println(e.getCause().getClass().getSimpleName());
    }
}

Результат:

Cannot read missing.txt
NoSuchFileException

Примечания

Функциональные интерфейсы вроде Function не объявляют throws, поэтому лямбда не может выбросить IOException. Решение — обернуть его в UncheckedIOException с исходной причиной. Files.lines() и BufferedReader.lines() сами бросают это исключение при ошибке чтения.

См. также

  • IOException — Проверяемое исключение для ошибок ввода-вывода: файлов, сети, потоков данных.
  • Throwable.getCause() — Возвращает исходное исключение, которое было обёрнуто в текущее.
  • -> (lambda) — Лямбда-выражение — короткая запись функции, которую можно передать как значение.

В учебнике

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

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