Что такое IOException в Java?

«Что такое IOException в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

IOException — это проверяемое исключение (checked exception) в Java, сигнализирующее об ошибке операции ввода-вывода. Является базовым классом для множества более специфичных IO-исключений.

Типичные причины:

  • Файл не найден (FileNotFoundException).
  • Отказ сетевого соединения (SocketException, ConnectException).
  • Попытка чтения после закрытия потока.
  • Ошибки доступа к файлу (отсутствие прав).
  • Достигнут конец потока (EOFException).

Пример обработки при чтении файла:

import java.io.*;

public class IOExceptionExample {
    public static void main(String[] args) {
        try (BufferedReader reader = new BufferedReader(new FileReader("data.txt"))) {
            String line;
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        } catch (FileNotFoundException e) {
            System.err.println("Файл не найден: " + e.getMessage());
        } catch (IOException e) { // Ловим базовое IOException
            System.err.println("Произошла ошибка ввода-вывода: " + e.getMessage());
        }
    }
}

Важные особенности:

  • Проверяемое исключение: Компилятор требует его обработки (блок try-catch) или объявления в сигнатуре метода (throws IOException).
  • Использование try-with-resources: Конструкция try-with-resources (как в примере) гарантирует автоматическое закрытие потоков, что помогает избежать утечек ресурсов и связанных с ними IOException.
  • Иерархия: Все конкретные IO-исключения наследуются от IOException, что позволяет ловить их все одним блоком catch, но при необходимости обрабатывать специфичные случаи отдельно.