我从未见过IOError
抛出一个案例.文档IOError
对此的唯一说法是:
发生严重I/O错误时抛出.
没有任何子类或任何其他明显的东西.
有没有什么时候IOError
会被抛出java?可能导致什么?
(这不应该被混淆IOException
- IOException
被广泛使用,并且是常用的;我知道.我想知道不太常见IOError
).
Mak*_*oto 13
Console
, Path#toAbsolutePath
并Path#toUri
声明抛出此特定异常.当然,这是文件事实,而不是实际的声明; 既然Error
是一个运行时异常,声明它在签名中抛出就没有任何意义.
从代码中看起来如何,Console#readLine
并通过其正常操作Console#readPassword
捕获IOException
结果,然后将其传播到IOError
.
本质上,IOError
表示底层文件系统的严重故障,或访问将Java与文件系统联系起来的某些资源.它不会经常被抛出,但如果文件系统内发生严重的事情,它有可能被抛出.
以下是来自 Oracle 的 Mark Reinhold 的解释:
\n\n\n\n\n新的 IOError 类是与新的 java.io.Console 类结合定义的。它适用于发生不可恢复的 I/O 错误且最合适的响应是终止程序而不是尝试处理异常的情况。
\n\nIOError 类以及许多其他增强功能将记录在 JCP 中即将进行的 Mustang 维护审查中。
\n
http://cafe.elharo.com/blogroll/undocumented-changes-in-java-6-mustang-ioerror/
\n有没有在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)