ПРЕДУПРЕЖДЕНИЕ: 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 во время компиляции, чтобы не было ненужных тестов во время выполнения, просто чтобы подавить бесполезное предупреждение.