Java - 抛出IOException异常

问题描述:

java.io.IOException似乎是最常见的异常类型,巧合的是,它似乎也是最含糊不清的。无论何时使用套接字,文件,& c,我都会看到throws IOException。然而,我从来没有真正对我开过一枪,所以我想知道那是什么原因会引发异常。该文档对解释发生的事情没有多大帮助:Java - 抛出IOException异常

表示发生某种I/O异常。该类是由失败或中断的I/O操作产生的常规异常类。

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

+3

'IOException'就是这样一个输入或输出异常。当人们使用它们时,它们通常只是概括更具体的错误。 [API](http://docs.oracle.com/javase/6/docs/api/java/io/IOException.html)列出了内置于Java SE 6中的所有不同类型的IO异常。 – Jon

+0

我知道什么是IOException,我只是想要一些能够更全面地描述它们何时发生的场景。 – Zaq

假设你:

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

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

通常,I/O表示输入或输出。只要输入或输出操作失败或解释,这些方法就会抛出IOException。请注意,这不会因读取或写入内存而抛出,因为Java将自动处理它。

这里有一些导致IOException的情况。

  • 从一个封闭的InputStream读
  • 尝试访问网络上的文件不净连接

Java文档有助于了解特定IOException

才有根本原因看文档页面IOExceptiondirect 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:该文件或流的端部的端部已被输入过程中意外到达信号。该异常主要由数据输入流用于信号流结束

SocketException:抛出以指示创建或访问套接字时发生错误。

RemoteException:RemoteException是在执行远程方法调用期间可能发生的一些通信相关异常的公共超类。远程接口的每个方法(扩展了java.rmi.Remote的接口)必须在其throws子句中列出RemoteException。

UnknownHostException:抛出以指示无法确定主机的IP地址。 (您可能无法连接到互联网)

MalformedURLException:抛出以表明发生了格式错误的URL。在规范字符串中找不到合法协议,或者无法解析字符串。