У вас есть состояние гонки:
- Вы вызываете
f.isDirectory()
, который возвращает true. - Я заменяю каталог в
path
каким-то обычным файлом. - Вы вызываете
f.listFiles()
, который возвращает null.
Чтобы избежать этого, скажите File[] files = f.listFiles();
безоговорочно, а затем измените if
на if (files != null)
. Еще лучше, уменьшите вложенность в вашем методе следующим образом:
public static boolean folderIsNotEmpty(String path) {
File f = new File(path);
File[] files = f.listFiles();
if (files == null) {
logger.warn("not a directory");
return false;
}
if (files.length > 0) {
logger.info("not empty");
return true;
} else {
logger.info("empty");
return false;
}
}
(Или, если вам не нужны операторы журнала, return (files.length > 0)
.)