分享
三行代码  ›  专栏  ›  技术社区  ›  Marcus Fong

嵌套尝试catch块不捕获异常 - Nested Try-Catch Block Not Catching Exception

  •  0
  • Marcus Fong  · 技术社区  · 1 周前

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

    如果文件名等于“test”,如果Test.cMP和Test.txt文件都不存在,我的程序仍然会抛出FieloToFunExtPosig,尽管在第一个catch之下,我的TestCcatch块仍然存在。我试着移动第二个尝试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”不存在。

    1 回复  |  直到 1 周前
        1
  •  4
  •   Kartik    1 周前

    打印该异常是因为该行:

    e2.printStackTrace();
    

    它按你所期望的工作,只是打印出错误。你可以移除这些 printStackTrace() 如果你不想见他们就打电话。嗯,不要删除最后一个catch块中的一个,否则你永远不知道那里是否有问题。

    另一方面,这种设计完全基于异常,这是不推荐的。我是 sure File 类来检查是否存在文件。

        2
  •  1
  •   Chamithra Thenuwara    1 周前

    这个程序按预期工作…

    catch (IOException e2) {//if no .txt (and .cmp) file was found  
    
        e2.printStackTrace();
        whichFileExists = 2; //no file exists
    
    }
    

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