在静态初始化程序中禁止FindBugs警告

时间:2013-12-04 06:50:09

标签: java findbugs suppress-warnings

我有一个静态初始化程序,我在其中创建一个新的File对象。当我将名称传递给它时,由于硬编码的绝对路径,FindBugs会报告警告。我怎么能抑制这个警告?

private static final String fileName = "/tmp/m123.txt";
static {
    if (new File(fileName).exists()) {
        ....
    }
}

3 个答案:

答案 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()) {
            ....
        }
    }
}

提取代码实际上可能足以避免警告,但我以前从未遇到过此警告。