java - 了解 Java IOException

标签 java ioexception

我需要一些帮助来理解 IOException。我在 Internet 上查阅了很多信息,并在 Oracle 的 Java 网站上查看了技术规范。

我对 IOException 类及其所有子类的理解是否正确,没有关联的“错误消息”或“返回代码”值?

因此,如果要发出一些消息和/或返回代码值,就必须使用 IOException 捕获逻辑插入它们吗?

如果以上为真,如何区分各种 IOException 子类?

例如如果应用程序检测到 IOException,它是哪种 IOException?文件结束、文件已关闭、文件未找到、文件正在使用等。

最佳答案

异常中没有“返回代码”值(通常),但它们确实包含错误消息。您应该在 catch block 中处理它们,您可以在其中指定要处理的异常类型。您可以在 try block 之后有多个 catch block ,以不同方式处理不同类型的异常。 catch block 将按指定顺序调用,第一个具有合适参数类型的 block 将处理异常。因此,您应该先捕获更具体的异常类型,然后再捕获更一般的异常类型。

简单的例子:

try {
  ...
  throw new FileNotFoundException("This is an error message");
  ...
} catch (FileNotFoundException e) {
  System.out.println("File not found: " + e.getMessage());
  ...
} catch (EOFException e) {
  System.out.println("End of file reached: " + e.getMessage());
  ...
} catch (IOException e) { // catch all IOExceptions not handled by previous catch blocks
  System.out.println("General I/O exception: " + e.getMessage());
  e.printStackTrace();
  ...
} 

正如您在最后一个 catch block 中看到的,异常存储了它们起源的堆栈跟踪,可以打印出来。但是,像这里这样直接打印此类消息通常不是一个好主意;在实际生产代码中,您通常希望使用日志记录框架记录这些消息,或者在 UI 上显示它们(的适当部分)。

关于java - 了解 Java IOException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5819121/

相关文章:

java - 第一次连接到 web 服务超时

java - Intent 不起作用

java - 正确放置尝试和捕获

java - 为什么这段代码会抛出 IOException?

c# - 异常代码,或检测到 "file already exists"类型的异常

java.io.IOException : Stream closed 异常

java - 抑制 Shell 脚本中的关键字扩展

java - 内联类在 openJdk 上生成奇怪的名字

java - 如何使用Java代码运行Java代码?

Java 当使用 Process#start() 时,抛出 IOException