Java – 抛出IOException的原因
java.io.IOException
似乎是最常见的exception类型,巧合的是,它似乎也是最模糊的。 每当使用套接字,文件和c编写时,我都会看到throws IOException
。 然而,我从来没有真正对我开火过,所以我想知道是什么原本应该解雇这个exception。 该文档对解释正在发生的事情没有多大帮助:
表示发生了某种I / Oexception的信号。 此类是由失败或中断的I / O操作产生的一般exception类。
有人可以解释一些抛出IOException的实例,或者它应该如何被利用。
假设你是:
- 读取网络文件并断开连接。
- 读取不再可用的本地文件。
- 使用某些流来读取数据和其他一些进程关闭了流。
- 尝试读取/写入文件但没有权限。
- 尝试写入文件但磁盘空间不再可用。
还有更多的例子,但根据我的经验,这些是最常见的。
通常,I / O表示输入或输出 。 每当输入或输出操作失败或解释时,这些方法都会抛出IOException
。 请注意,这不会因读取或写入内存而抛出,因为Java会自动处理它。
以下是导致IOException
一些情况。
- 从封闭的输入流中读取
- 尝试在没有网络连接的情况下访问互联网上的文件
Java文档有助于了解特定IOException的根本原因
只需从文档页面查看IOException
direct known sub-interfaces
:
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 :表示在输入期间意外到达文件末尾或流末尾的信号。 此exception主要由数据输入流用于信号流的结束
SocketException :抛出以指示创建或访问Socket时出错。
RemoteException :RemoteException是执行远程方法调用期间可能发生的许多与通信相关的exception的公共超类。 远程接口的每个方法(扩展java.rmi.Remote的接口)必须在其throws子句中列出RemoteException。
UnknownHostException :抛出此exception表示无法确定主机的IP地址。 (您可能没有连接到互联网)
MalformedURLException :抛出以指示发生了格式错误的URL。 要么在规范字符串中找不到合法的协议,要么无法解析字符串。