嵌套的 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();
打印它
我的程序正在尝试扫描我的目录以搜索是否存在 .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();