DD和DU异常功能

时间:2017-06-06 09:41:39

标签: java pmd

我最近开始使用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显示异常的方式编写此功能,我将不胜感激。

1 个答案:

答案 0 :(得分: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() + "!");
        }