JAVA+;是否尝试将catch(FileNotFoundException e)放入catch(Exception e)中?

JAVA+;是否尝试将catch(FileNotFoundException e)放入catch(Exception e)中?,java,try-catch,filenotfoundexception,Java,Try Catch,Filenotfoundexception,我有一些在磁盘上创建文件的命令。 因为必须在其中创建文件的文件夹是动态的,所以我有一个catch(filenotfounde异常)。在同一个try块中,我已经有一个catch(异常e)块。 出于某种原因,当我运行代码而文件夹还不存在时,将使用catch(Exception e)块,而不是FileNotFoundException块 但调试器很清楚(至少对我来说),显示了FileNotFoundException:java.io.FileNotFoundException:c:\mydata\2F

我有一些在磁盘上创建文件的命令。 因为必须在其中创建文件的文件夹是动态的,所以我有一个catch(filenotfounde异常)。在同一个try块中,我已经有一个catch(异常e)块。 出于某种原因,当我运行代码而文件夹还不存在时,将使用catch(Exception e)块,而不是FileNotFoundException块

但调试器很清楚(至少对我来说),显示了FileNotFoundException:java.io.FileNotFoundException:c:\mydata\2F8890C2-13B9-4D65-987D-5F447FF0DDA7\filename.png(系统找不到指定的路径)

知道它为什么不进入FileNotFoundException块吗? 谢谢,

代码:


您遇到的特定问题也可能不是FileNotFoundException。通过在catch块(所有异常的父类)中使用“Exception”,这实际上是一个“catch all”,因为如果抛出`异常或其任何子类,它将运行

尝试以下更改:

...

catch (Exception e) {
  System.out.println(e.getClass());
}
...

这将告诉您该块捕获的异常的特定类。我敢打赌,您会发现异常实际上是子类的一个实例(例如IOException)。

您的问题是FileNotFoundException被抛出到java库的某个深处,没有传播,因此您无法捕获它。 这里真正的罪魁祸首是源于

ImageIO.write(image, "png", new File(fileName));
打电话。这一个运行到您的
catch(异常e)
块中。

如果在常规异常捕获之前添加一个
catch(NullPointerException e)
块,您将看到它进入其中。

如果您发布您遇到问题的实际代码段,这将非常有用。还要确保导入的FileNotFoundException与抛出的FileNotFoundException相同。如果类路径上有另一个库也有FileNotFoundException,IDE有时可能会导入错误的包。不太可能,但首先排除这一点很重要。请发布代码和stacktrace。这应该可以。按照@normalocity的建议确认异常类名。我敢猜测这可能是一个普遍的例外。
ImageIO.write(image, "png", new File(fileName));