Java 功能上的DD和DU异常

Java 功能上的DD和DU异常,java,pmd,Java,Pmd,我最近开始使用PMD来保持我的代码干净,它一直运行得很好,但是我在下面的函数中遇到了一些问题 private final void readFile() throws Exception{ code.clear(); imports.clear(); //DD anomaly FileReader fileReader = null; BufferedReader bufferedReader = null; try{ file

我最近开始使用PMD来保持我的代码干净,它一直运行得很好,但是我在下面的函数中遇到了一些问题

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;
如果我没有将两者都设置为null,异常就会消失,但我在finally块中得到一个错误。我不知道写这篇文章的正确方法是什么

接下来是DU异常:

boolean code_started = false;
while((line = bufferedReader.readLine()) != null)
如果我不设置变量,异常会消失,但在几行之后会再次出现错误

最后一个是DU异常:

boolean code_started = false;
while((line = bufferedReader.readLine()) != null)
这个异常可能与上面的一样,但我也不知道如何修复它


如果有人能解释或演示如何以不会导致PMD显示异常的方式编写此函数,我将不胜感激

如果您使用的是Java 7或更高版本,您可以尝试使用资源。try with resources语句确保在语句末尾关闭每个资源。下面是如何使用它的示例

浏览:了解更多信息

        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() + "!");
        }

谢谢这解决了第一个异常。如果能看到如何在旧版本的java中解决这个问题,那就太好了。现在我对布尔变量很好奇,因为这是一个我根本不懂的变量。布尔变量的异常情况到底是什么意思?我相信随着语言的新版本发布,这些工具会不断自我更新。在PMD中部署项目时是否有选择语言版本的选项。因此,如果我告诉PMD我使用的是java 1.5,它不会标记FileReader和BufferedReader?至于DU异常-PMD只告诉我有一个DU异常和从当前行到函数末尾的行范围,对于Java版本部分,不确定…可能(从未使用过PMD)…对于第二部分,请尝试更改变量名称,可能是外壳问题…将名称更改为codeStarted或其他驼峰案例…如果仍然失败,那么让我们看看我们可以做什么。。。