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