2017-06-06 84 views
0

我最近開始使用PMD來保持我的代碼清潔,並且它進行得很順利,但是我在以下函數中遇到了一些問題。功能中的DD和DU異常

private final void readFile() throws Exception{ 
    code.clear(); 
    imports.clear(); 

    //DD anomaly 
    FileReader fileReader = null; 
    BufferedReader bufferedReader = null; 

    try{ 
     fileReader = new FileReader(file); 
     bufferedReader = new BufferedReader(fileReader); 

     String line; 
     //DU anomaly 
     boolean code_started = false; 
     //DU anomaly 
     while((line = bufferedReader.readLine()) != null){ 
      if(code_started) code.add(line); 
      else{ 
       if(lineIsImport(line)) 
        imports.add(line); 
       else if(lineIsClassDeclaretion(line)){ 
        code_started = true; 
        code.add(line);      
       } 
      } 
     } 
    } 
    catch(FileNotFoundException fn_ex){ 
     throw new Exception("File not found!"); 
    } 
    catch(IOException io_ex){ 
     throw new Exception("Failed to read file: " + file.getName() + "!"); 
    } 
    finally{ 
     try{ 
      if(bufferedReader != null) 
       bufferedReader.close(); 
      if(fileReader != null) 
       fileReader.close(); 
     } 
     catch(IOException io_ex){ 
      throw new Exception("Failed to close reader"); 
     }   
    } 
} 

第一個DD異常:

FileReader fileReader = null; 
BufferedReader bufferedReader = null; 

如果我不設置既要異常消失,但我在finally塊得到一個錯誤。我不知道寫這個的正確方法應該是什麼。

其次是DU異常:

boolean code_started = false; 

如果我不設置該變量的異常消失,但同樣的錯誤了幾行了。

最後是DU異常:

while((line = bufferedReader.readLine()) != null) 

這種異常現象可能是相同的,如上圖所示,但同樣我不知道如何解決它。

如果有人能夠解釋或顯示如何以不會導致PMD顯示異常的方式編寫此函數,我將不勝感激。

回答

0

如果您使用的是Java 7或更高版本,則可以嘗試使用資源。 try-with-resources語句確保每個資源在語句結束時都關閉。下面是你如何使用它的例子。

通過:https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html欲瞭解更多信息。

 File file = null; 
     //Automatically closes resources try-with-resources block 
     try(FileReader fileReader = new FileReader(file);BufferedReader bufferedReader = new BufferedReader(fileReader);){ 
      String line; 
      boolean code_started = false; 
      while((line = bufferedReader.readLine()) != null){ 
       //Code Goes Here 
      } 
     }catch(FileNotFoundException fn_ex){ 
      throw new Exception("File not found!"); 
     } 
     catch(IOException io_ex){ 
      throw new Exception("Failed to read file: " + file.getName() + "!"); 
     } 
+0

謝謝。這解決了第一個異常。看到如何在老版本的java中解決這個問題真是太棒了。現在我對**布爾變量**很好奇,因爲那是我根本不理解的。 – Reiten

+0

什麼是布爾的異常說法? – utkarsh31

+0

我相信隨着更新版本的語言的發佈,這些工具會不斷更新。在PMD中部署項目以選擇語言版本時是否有一個選項? – utkarsh31