48

java.io.IOException似乎是最常见的异常类型,巧合的是,它似乎也是最模棱两可的。

我一直看到throws IOException使用套接字、文件等进行写入的时候。但是,我实际上从来没有向我开过火,所以我想知道是什么应该引发异常。该文档对于解释正在发生的事情不是很有帮助:

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

在哪些情况下会抛出 IOException,应该如何使用它?

4

3 回答 3

88

假设你是:

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

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

于 2012-11-04T04:51:10.183 回答
18

通常, I/O 表示Input 或 OutputIOException每当输入或输出操作失败或解释时,这些方法都会抛出。请注意,这不会被抛出以读取或写入内存,因为 Java 将自动处理它。

以下是一些导致IOException.

  • 从关闭的输入流中读取
  • 尝试在没有网络连接的情况下访问 Internet 上的文件
于 2012-11-04T04:53:37.327 回答
12

Java 文档有助于了解特定IOException的根本原因。

只需查看文档页面中直接已知的子接口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 的接口)的每个方法都必须在其 throws 子句中列出 RemoteException。

UnknownHostException:抛出表示无法确定主机的 IP 地址(您可能未连接到 Internet)。

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

于 2016-07-14T09:19:39.687 回答