我有一个静态初始化程序,我在其中创建一个新的File
对象。当我将名称传递给它时,由于硬编码的绝对路径,FindBugs会报告警告。我怎么能抑制这个警告?
private static final String fileName = "/tmp/m123.txt";
static {
if (new File(fileName).exists()) {
....
}
}
答案 0 :(得分:1)
您可以使用ENUM,我使用ENUM消除字符串/文本的硬编码,两个findbugs和pmd都不会显示错误或警告。
public enum MyFiles {
FILE_NAME("/kp/kp1/kp2.tx");
private String value;
MyFiles(String value){
this.value = value;
}
您的fileName不是大写的,因此pmd会显示类型1的错误。所以把它改成大写
private static final String FILE_NAME = "/tmp/m123.txt"
答案 1 :(得分:0)
您可以将此硬编码文件名移动到属性文件或命令行参数等。
有关属性文件http://www.mkyong.com/java/java-properties-file-examples/
的教程,请参阅此页面在你想要忽略这个警告但是根据页面findbugs.sourceforge.net/manual/running.html#commandLineOptions你可以使用-exclude filterFile.xml
答案 2 :(得分:0)
通常我不会提倡过多地重构代码来避免警告,但是在这种情况下你会因为无法注释静态初始化器而陷入困境。您可以将代码移动到另一个类中的静态方法,您可以使用SuppressFBWarnings
进行注释。
public class MainClass {
private static final String FILE_NAME = "/tmp/m123.txt";
static {
HelperClass.loadFile(FILE_NAME);
}
}
public class HelperClass {
@SuppressFBWarnings("DMI_HARDCODED_ABSOLUTE_FILENAME")
public static void loadFile(String fileName) {
if (new File(fileName).exists()) {
....
}
}
}
提取代码实际上可能足以避免警告,但我以前从未遇到过此警告。