Java - Что бросает IOException

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

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

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

3 ответа

Решение

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

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

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

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

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

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

Документация по 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: Брошенный, чтобы указать, что есть ошибка, создающая или получающая доступ к Сокету.

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

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

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

Другие вопросы по тегам