Java – 抛出IOException的原因

java.io.IOException似乎是最常见的exception类型,巧合的是,它似乎也是最模糊的。 每当使用套接字,文件和c编写时,我都会看到throws IOException 。 然而,我从来没有真正对我开火过,所以我想知道是什么原本应该解雇这个exception。 该文档对解释正在发生的事情没有多大帮助:

表示发生了某种I / Oexception的信号。 此类是由失败或中断的I / O操作产生的一般exception类。

有人可以解释一些抛出IOException的实例,或者它应该如何被利用。

假设你是:

  1. 读取网络文件并断开连接。
  2. 读取不再可用的本地文件。
  3. 使用某些流来读取数据和其他一些进程关闭了流。
  4. 尝试读取/写入文件但没有权限。
  5. 尝试写入文件但磁盘空间不再可用。

还有更多的例子,但根据我的经验,这些是最常见的。

通常,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。 要么在规范字符串中找不到合法的协议,要么无法解析字符串。