何时可能抛出IOError?

Pok*_*u22 25 java ioerror

我从未见过IOError抛出一个案例.文档IOError对此的唯一说法是:

发生严重I/O错误时抛出.

没有任何子类或任何其他明显的东西.

有没有什么时候IOError会被抛出java?可能导致什么?

(这不应该被混淆IOException- IOException被广泛使用,并且是常用的;我知道.我想知道不太常见IOError).

Mak*_*oto 13

Console, Path#toAbsolutePathPath#toUri声明抛出此特定异常.当然,这是文件事实,而不是实际的声明; 既然Error是一个运行时异常,声明它在签名中抛出就没有任何意义.

从代码中看起来如何,Console#readLine并通过其正常操作Console#readPassword捕获IOException结果,然后将其传播到IOError.

本质上,IOError表示底层文件系统的严重故障,或访问将Java与文件系统联系起来的某些资源.它不会经常被抛出,但如果文件系统内发生严重的事情,它有可能被抛出.

  • 您可以查看[代码中的用法列表](http://grepcode.com/search/usages?id=repository.grepcode.com$java$root@jdk$openjdk@7u40-b43@java$io@IOError&start = 0&类型=类型&K = U).在JDK中,我只能找到`Console`,`sun.nio.fs.WindowsPath`和`sun.nio.fs.WindowsLinkSupport`. (3认同)

RRM*_*RRM 6

以下是来自 Oracle 的 Mark Reinhold 的解释:

\n\n
\n

新的 IOError 类是与新的 java.io.Console 类结合定义的。它适用于发生不可恢复的 I/O 错误且最合适的响应是终止程序而不是尝试处理异常的情况。

\n\n

IOError 类以及许多其他增强功能将记录在 JCP 中即将进行的 Mustang 维护审查中。

\n
\n\n

http://cafe.elharo.com/blogroll/undocumented-changes-in-java-6-mustang-ioerror/

\n


Jea*_*ard 5

有没有在IO中抛出IOError的情况?

import java.io.IOError;

public class Test {

    public static void main(String[] args) {
        throw new IOError(new Exception());
    }

}
Run Code Online (Sandbox Code Playgroud)

会导致

Exception in thread "main" java.io.IOError: java.lang.Exception
    at test.Test.main(Test.java:13)
Caused by: java.lang.Exception
    ... 1 more
Java Result: 1
Run Code Online (Sandbox Code Playgroud)

我相信你期待一个更有可能发生的案例.

一个IOError试图从那里输入流已关闭控制台读取时会被抛出例如.

您可以尝试运行此代码段

import java.io.*;

public class Test {

    public static void main(String[] s) {
        Console con = System.console();
        try {
            InputStreamReader reader = new InputStreamReader(System.in);
            reader.close();
            String st = con.readLine("%s", "Enter a line");
        } catch (IOException e) {
            e.printStackTrace();
        } catch (IOError error) {
            error.printStackTrace();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

那会导致

java.io.IOError: java.io.IOException: Stream Closed
    at java.io.Console.readLine(Console.java:254)
    at Test.main(Test.java:10)
Caused by: java.io.IOException: Stream Closed
    at java.io.FileInputStream.readBytes(Native Method)
    at java.io.FileInputStream.read(FileInputStream.java:246)
    at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
    at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
    at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
    at java.io.Console$LineReader.read(Console.java:437)
    at java.io.Console.readline(Console.java:376)
    at java.io.Console.readLine(Console.java:250)
    ... 1 more
Run Code Online (Sandbox Code Playgroud)