ПРЕДУПРЕЖДЕНИЕ: File.mkdir() игнорируется

Я создал базовое приложение для записи звука с использованием API Media Recorder. Я пытаюсь создать папку на SD-карте и сохранить мои записанные файлы в этой папке. Я получаю это предупреждение со следующим кодом.

Файл .mkdir() игнорируется

    // Assign random number to avoid audio file from overwriting
    Long tsLong = System.currentTimeMillis()/1000;

    // Specify a Location for the recorded file to be stored in the SD card
    mFileName = Environment.getExternalStorageDirectory().getAbsolutePath() + "/AudioRecordTest/";
    File path = new File(mFileName);
    if(!path.exists()) {
        path.mkdir();
    }
    mFileName += "/AudioRecordTest_" + tsLong.toString() + ".mp3";

Как решить это предупреждение. Не стесняйтесь изменять код, если есть какая-либо другая ошибка.

Ответ 1

Исправьте меня, если я ошибаюсь, но я ожидаю, что это сообщение (компиляция) действительно говорит об этом:

Результат File.mkdir() игнорируется

... или что-то в этом роде. Он говорит вам, что вы игнорируете результат вызова mkdir(), который сообщает вам, был ли создан каталог.

Один из способов избежать предупреждения - проверить результат и действовать соответствующим образом. Другим было бы просто присвоить результат временной переменной, проигнорировать ее и (потенциально) свернуть позже, потому что каталог не был создан, когда он должен был быть.

(Угадайте, какое решение лучше...)


Не стесняйтесь изменять код, если есть какая-либо другая ошибка.

Поскольку вы спросили... это BAD STYLE использовать венгерскую нотацию для имен переменных Java. Java - это строго типизированный язык, где все переменные имеют четкие объявленные типы. Вам не нужны ментальные костыли какого-либо ужасного идентификатора, чтобы рассказать вам, какой тип переменной должен быть.

Ответ 2

Как показывает @Stephen C, я обрабатывал эти способы

1)

boolean isDirectoryCreated= path.mkdir();

и игнорировать 'isDirectoryCreated'

2) (рекомендуется)

 boolean isDirectoryCreated=path.exists();
 if (!isDirectoryCreated) {
     isDirectoryCreated= path.mkdir();
 }
 if(isDirectoryCreated) {
    // do something
 }

3)

if (!path.exists()) {
   if(path.mkdir()){
     // do something
   }
}

Ответ 3

Если вы хотите игнорировать это предупреждение, добавьте это в метод: @SuppressWarnings ( "все" )

Ответ 4

Я создал служебную функцию:

@SuppressWarnings("unused")
private static void IGNORE_RESULT(boolean b) {}

А потом использовать:

IGNORE_RESULT(path.mkdir());

Мне нравится это решение, потому что оно самодокументируется. Вы явно заявляете, что знаете, что результат есть, и намеренно его игнорируете. Он также должен оптимизироваться до NOP во время компиляции, чтобы не было ненужных тестов во время выполнения, просто чтобы подавить бесполезное предупреждение.