Подтвердить что ты не робот

Java - Что вызывает исключение IOException

java.io.IOException, по-видимому, является наиболее распространенным типом исключения, по совпадению, он также кажется самым двусмысленным. Я всегда вижу throws IOException, когда пишу с сокетами, файлами и c. Тем не менее, я никогда не стрелял в меня, поэтому мне интересно, что это такое, что должно быть сделано для исключения. Документация не очень помогает объяснить, что происходит:

Сигналы о том, что произошло какое-либо исключение ввода-вывода. Этот класс является общим классом исключений, вызванных неудачными или прерванными операциями ввода-вывода.

Может кто-нибудь объяснить некоторые случаи, когда будет выбрано исключение IOException или как оно должно использоваться.

4b9b3361

Ответ 1

Предположим, вы были:

  • Чтение сетевого файла и его отсоединение.
  • Чтение локального файла, который больше не доступен.
  • Использование некоторого потока для чтения данных и другого процесса закрывает поток.
  • Попытка чтения/записи файла, но не имеет разрешения.
  • Попытка записать файл, но дисковое пространство больше не доступно.

Есть еще много примеров, но они наиболее распространены в моем опыте.

Ответ 2

В общем случае I/O означает Ввод или вывод. Эти методы бросают IOException всякий раз, когда операция ввода или вывода не выполняется или интерпретируется. Обратите внимание, что это не будет выбрано для чтения или записи в память, так как Java будет обрабатывать его автоматически.

Вот некоторые случаи, которые приводят к IOException.

  • Чтение из закрытого входного потока
  • Попробуйте получить доступ к файлу в Интернете без сетевого подключения.

Ответ 3

Документация по Java полезна, чтобы знать основную причину конкретного IOException

Просто просмотрите direct known sub-interfaces из IOException на странице документации:

ChangedCharSetException, CharacterCodingException, CharConversionException, ClosedChannelException, EOFException, FileLockInterruptionException, FileNotFoundException, FilerException, FileSystemException, HttpRetryException, IIOException, InterruptedByTimeoutException, InterruptedIOException, InvalidPropertiesFormatException, JMXProviderException, JMXServerErrorException, MalformedURLException, ObjectStreamException, ProtocolException, RemoteException, SaslException, SocketException, SSLException, SyncFailedException, UnknownHostException, UnknownServiceException, UnsupportedDataTypeException, UnsupportedEncodingException, UserPrincipalNotFoundException, UTFDataFormatException, ZipException

Большинство этих исключений объясняются сами собой.

Немного IOExceptions с корневыми причинами:

EOFException: сигнализирует о том, что конец файла или конец потока неожиданно достигнут во время ввода. Это исключение в основном используется потоками ввода данных для конца сигнала потока

SocketException: выброшено, чтобы указать, что существует ошибка при создании или доступе к Socket.

RemoteException: RemoteException - это общий суперкласс для ряда связанных с связью исключений, которые могут возникать во время выполнения удаленного метода вызов. Каждый метод удаленного интерфейса, интерфейс, который расширяет java.rmi.Remote, должен указывать RemoteException в предложении throws.

UnknownHostException: бросить, чтобы указать, что IP-адрес хоста не может быть определен. (вы не можете подключиться к Интернету)

MalformedURLException: выброшено, чтобы указать, что произошел неправильный URL. Либо ни один юридический протокол не может быть найден в строке спецификации, или строка не может быть проанализирована.