Метод listFiles
ожидает лямбду с двумя параметрами, основанную на преобразовании SAM из этого метода на интерфейсе FilenameFilter
:
/**
* Tests if a specified file should be included in a file list.
*
* @param dir the directory in which the file was found.
* @param name the name of the file.
* @return <code>true</code> if and only if the name should be
* included in the file list; <code>false</code> otherwise.
*/
boolean accept(File dir, String name);
Первый параметр:КАТАЛОГ, содержащий файл, а не сам файл.Только второй параметр представляет файл в каталоге.Таким образом, ваш file.length()
проверяет fileDirectory.length()
вместо длины файла.
По сути, читайте ваш исходный код как:
val fileArray = fileDirectory.listFiles { directory, filename ->
directory.length() > 0 && filename.matches(fileMatcherRegex)
}
И теперь вы можете видеть, что это неверная логика.
Если вы используете один и тот же параметр для своей лямбды, тогда вы указываете его на основе SAM преобразования из интерфейса FileFilter
, который:
/**
* Tests whether or not the specified abstract pathname should be
* included in a pathname list.
*
* @param pathname The abstract pathname to be tested
* @return <code>true</code> if and only if <code>pathname</code>
* should be included
*/
boolean accept(File pathname);
Иэто правильный вопрос, где вы задаете вопросы о файле, а не о каталоге.Ваш код будет:
val fileArray = fileDirectory.listFiles { file ->
file.length() > 0 && file.name.matches(fileMatcherRegex)
}