嵌套的 Try-Catch 块未捕获异常

Nested Try-Catch Block Not Catching Exception

我的程序正在尝试扫描我的目录以搜索是否存在 .cmp 或 .txt 文件。

如果 fileName 等于 "test" 并且 test.cmp 和 test.txt 文件都不存在,尽管我的 try-catch 块位于第一个 catch 下,但我的程序仍会抛出 FileNotFoundException。我试过移动第二个 try-catch 块,但似乎没有任何效果——我用一个不存在的文件测试代码的所有内容最终仍然会抛出异常。

public int checkFileExistence() {
        BufferedReader br = null;
        int whichFileExists = 0;


        try {//check to see if a .cmp exists
            br = new BufferedReader(new FileReader(fileName + ".cmp")); 
            whichFileExists = 0;// a .cmp exists
        }

        catch (IOException e){ //runs if a .cmp file has not been found
            try {//check to see if a .txt file exists
                br = new BufferedReader(new FileReader(fileName + ".txt"));
                whichFileExists = 1;//a .txt file exists
            }
            catch (IOException e2) {//if no .txt (and .cmp) file was found  

                e2.printStackTrace();
                whichFileExists = 2; //no file exists

            }

        }

        finally {   

            try {
                br.close();
            } 

            catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }


        return whichFileExists;
    }


我希望该程序能够运行,但每次我测试该程序时,该程序都会抛出一个 FileNotFoundException,其中显示 "test.txt" 不存在。

由于这一行,正在打印该异常:

e2.printStackTrace();

它按您预期的那样工作,只是打印出它得到的错误。如果您不想看到这些 printStackTrace() 来电,可以删除它们。好吧,不要删除最后一个catch块中的那个,否则你永远不知道那里是否有问题。

另外说明,这种设计完全基于异常,不推荐。我是 sure File class 中有一些方法可以检查文件是否存在。

该程序按预期工作...

catch (IOException e2) {//if no .txt (and .cmp) file was found  

    e2.printStackTrace();
    whichFileExists = 2; //no file exists

}

上面的 catch 子句捕获您的 IOException 并用 e2.printStackTrace();

打印它