Единственное исключение, выброшенное из вашего кода, которое относится к семейству исключений IOException
, это FileNotFoundException
.Поскольку у вас уже есть блок catch для него (в частности), блок catch IOException
становится избыточным.
В других случаях они могут делать что-то еще в try-catch, что также вызывает другое исключениев семействе IOException
(или, может быть, выбрасывает IOException
), так что ловить IOException
имеет смысл.Например, рассмотрим этот код:
FileInputStream fis = new FileInputStream(file);
fis.read();
Если вы поместите это в блок try-catch, вы можете перехватить и FileNotFoundException
, и IOException
, и предупреждений не будет.Вторая строка выдает IOException
напрямую.
Как можно видеть здесь , Сканер проглатывает любые IOException
s, выбрасываемые базовым потоком во время чтения.Если вы обеспокоены решением проблем с чтением файла, у вас есть два варианта:
a) Не используйте Scanner, но вместо этого используйте API более низкого уровня, например Reader или InputStream.
b) Как только ваш цикл while
завершится, сделайте это (хотя это очень необычно):
if (scan.ioException() != null) {
throw scan.ioException();
}