在Java中,我们可以捕捉特定类型的异常:Java的标识异常精确
try{
// Code that does IO like download a file...
}catch(IOException ioe){
ioe.printStackTrace();
// handle ioe
}catch(SomeOtherException soe){
// handle soe
}
现在,可以由很多原因一个例外,在这种情况下,IOException
可以是:
java.io.IOException: Illegal character in path at index.....
从特定库或一些其他类似的
:
java.io.IOException: Stream closed ...
如果出现了一些问题a Stream
现在,我的问题是,我该如何确定发生什么样的IOException
?
如何区分Stream closed
和Illegal character in path at index...
?
当然,我可以检查异常消息的字符串,但我不认为这是最好的方式,因为底层库/实现可以更改消息字符串。
编辑:
e.getClass()
在这种情况下,几乎一切恢复java.io.IOException
...
我猜库抛出自己IOException
而丢弃任何原始Exception
。
我回复了你,因为这是看到'IOEeception'并知道它是一个具体类型的唯一答案。我不知道为什么有人会首先让你失望... – tom91136 2014-08-27 19:33:20
@HovercraftFullOfEels'printStackTrace'方法取决于'toString'方法。 'Throwable'实现用'getClass()。getName()'打印类名。因此,除非'StreamClosedException'覆盖其'toString'来返回'IOException'类名,否则具体类型是'IOException'。 – 2014-08-27 19:42:30
@SotiriosDelimanolis:道歉。 – 2014-08-27 19:43:36