Используемый метод list()
выводит список файлов имен , а не их абсолютных путей .
Итак, ваш код перечисляет все имена файлов в sourcedir
(не их полные пути), а затем ищет те же имена файлов в текущем каталоге, из которого вы запускаете программу. Вот почему length()
возвращает 0 для всех этих файлов ( согласно документам , он возвращает 0, если файл не существует.)
Если вместо этого вам нужен список всех абсолютных путей , то вы можете сделать это кратко, используя потоки, например:
List<String> files = Arrays.stream(new File("C:\\users\\michael\\desktop").listFiles())
.map(f -> f.getAbsolutePath())
.collect(Collectors.toList());
Однако, если все эти файлы будут когда-либо только из одного каталога, используйте new File(sourcedir, name)
в цикле for (это лучшая альтернатива, чем new File(sourcedir + PATH_BACK_SLASH + name)
, который вы используете в другом месте.)