我最近开始使用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显示异常的方式编写此功能,我将不胜感激。
答案 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() + "!");
}