Java - Что вызывает исключение IOException
java.io.IOException
, по-видимому, является наиболее распространенным типом исключения, по совпадению, он также кажется самым двусмысленным. Я всегда вижу throws IOException
, когда пишу с сокетами, файлами и c. Тем не менее, я никогда не стрелял в меня, поэтому мне интересно, что это такое, что должно быть сделано для исключения. Документация не очень помогает объяснить, что происходит:
Сигналы о том, что произошло какое-либо исключение ввода-вывода. Этот класс является общим классом исключений, вызванных неудачными или прерванными операциями ввода-вывода.
Может кто-нибудь объяснить некоторые случаи, когда будет выбрано исключение IOException или как оно должно использоваться.
Ответы
Ответ 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. Либо ни один юридический протокол не может быть найден в строке спецификации, или строка не может быть проанализирована.