DD 和 DU 功能异常

DD and DU anomalys in function

我最近开始使用 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;

如果我不设置变量,异常现象就会消失,但在几行之后又会出现错误。

最后一个是DU异常:

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

这个异常可能与上面的异常相同,但我还是不知道如何修复它。

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

如果您使用的是 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() + "!");
        }