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

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

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

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

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

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

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

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

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

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

Документация по 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 : Сигналы о том, что конец файла или конец streamа неожиданно достигнут во время ввода. Это исключение в основном используется streamами ввода данных в конец сигнала streamа

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

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

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

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

  • Лучшее исключение для неисчерпывающих шаблонов в случае
  • C ++ ловит все исключения
  • C # - получить номер строки, в которой было исключение
  • Puzzling Enumerable.Cast InvalidCastException
  • Не удалось загрузить файл или сборку ... Была сделана попытка загрузить программу с неправильным форматом (System.BadImageFormatException)
  • Устранение неполадок BadImageFormatException
  • Должен ли я получать пользовательские исключения из Exception или ApplicationException в .NET?
  • Android Studio IDE: перерыв на исключении
  • Будут ли исключения C ++ безопасно распространяться через C-код?
  • java.io.NotSerializableException
  • В C #, как я могу rethrow InnerException без потери трассировки стека?
  • Давайте будем гением компьютера.