2013-12-04 2 views
2

У меня есть статический инициализатор, где я создаю новый объект File. Когда я передаю имя ему, FindBugs сообщает о предупреждении из-за жесткого кодированного абсолютного пути. Как я могу подавить это предупреждение?Подавить предупреждение FindBugs в статическом инициализаторе

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

Можете ли вы разместить код? Похоже, это жестко запрограммированные данные ... подумали ли вы о переносе его в аннотацию? –

+0

Привет, я обновил мой пример кода ... Предупреждение относится к типу DMI_HARDCODED_ABSOLUTE_FILENAME – Manav

ответ

0

Вы можете переместить это жестко имя файла для файла свойств, или аргумент командной строки и т.д.

Смотрите эту страницу для учебника по файлам свойства http://www.mkyong.com/java/java-properties-file-examples/

В вы хотите игнорировать это предупреждение, но согласно странице findbugs.sourceforge.net/manual/running.html#commandLineOptions вы можете использовать -exclude filterFile.xml

+1

Я уже определил имя файла как общедоступное статическое окончательное String ... этого недостаточно? – Manav

+0

Спасибо ... но разве нет другого способа подавить это предупреждение? – Manav

+0

Да, согласно странице http://findbugs.sourceforge.net/manual/running.html#commandLineOptions вы можете использовать '-exclude filterFile.xml' –

1

Вы можете использовать ENUM, я использую ENUM для устранения жесткого кодирования строк/текста как findbugs, так и pmd не делает чтобы показать ошибки или предупреждение.

public enum MyFiles { 

    FILE_NAME("/kp/kp1/kp2.tx"); 

    private String value; 

    MyFiles(String value){ 

     this.value = value; 

    } 

Ваше имя_файла не является прописным, поэтому pmd будет показывать ошибку типа 1 для него. Таким образом, изменить его в верхний регистр

private static final String FILE_NAME = "/tmp/m123.txt" 
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()) { 
      .... 
     } 
    } 
} 

Извлечь код на самом деле может быть достаточно, чтобы избежать предупреждения, но я никогда не сталкивался с этим предупреждением раньше.