Java精确地识别异常

tom*_*136 5 java exception

在Java中,我们可以捕获某种类型的异常:

try{ 
    // Code that does IO like download a file...
}catch(IOException ioe){
    ioe.printStackTrace();
    // handle ioe
}catch(SomeOtherException soe){
    // handle soe 
}
Run Code Online (Sandbox Code Playgroud)

现在,可能有多种原因导致异常,在这种情况下,IOException可以是:

java.io.IOException: Illegal character in path at index.....
Run Code Online (Sandbox Code Playgroud)

来自特定的图书馆或其他类似的:

java.io.IOException: Stream closed ...
Run Code Online (Sandbox Code Playgroud)

如果出现问题 Stream

现在,我的问题是,我该如何确定IOException发生了什么?

我该如何区分a Stream closedIllegal character in path at index...

当然我可以检查异常消息的字符串,但我不认为这是最好的方法,因为底层库/实现可以更改消息字符串.

编辑:

e.getClass()在这种情况下返回java.io.IOException几乎所有...

我想图书馆IOException在抛弃任何原件的同时抛出自己的东西Exception.

Sot*_*lis 7

printStackTrace印刷的事实

java.io.IOException: Stream closed ...
//      ^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

java.io.IOException: Illegal character in path at index.....
//      ^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

意思Exception是类型IOException.您可以在此处使用更具体的子类型.

在这种情况下没有办法.他们决定在Exception这两个(以及更多)原因中使用相同的类型.您将无法用不同的catch陈述区分它们.你需要检查他们的消息.

如果Exception有a cause,你必须看看是否有区别类型并重新抛出它.如果你很幸运,你可能能够捕捉更具体的类型Exception.

  • 我赞成你,因为这是唯一看到`IOEeception`并且知道它是具体类型的答案.我不知道为什么有人会在第一时间向你投票...... (2认同)