UncheckedIOException
Непроверяемая обёртка над `IOException` — нужна там, где проверяемые исключения запрещены, например в лямбдах.
Доступно с: Java 8
Синтаксис
public class UncheckedIOException extends RuntimeException
public UncheckedIOException(String message, IOException cause)Параметры
| Параметр | Тип | Описание |
|---|---|---|
| message | String | Текст ошибки. |
| cause | IOException | Исходное проверяемое исключение. |
Примеры
Ошибка ввода-вывода внутри лямбды:
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) — Лямбда-выражение — короткая запись функции, которую можно передать как значение.
В учебнике
- Проверяемые и непроверяемые исключения — Checked и unchecked исключения в Java — что требует компилятор, объявление throws, RuntimeException и обёртывание исключений.