Получение файлов определенного расширения с помощью PathMatcher - PullRequest
0 голосов
/ 02 мая 2018

Я бы хотел получить все * .pdf файлы из каталога (но не с его подкаталогами). Я использую FileSystems.getDefault().getPathMatcher( "glob:**.pdf"), но он работает рекурсивно.

EDIT

Я уже пробовал FileSystems.getDefault().getPathMatcher( "glob:*.pdf"), но это не дает мне файлов (но в данном каталоге есть * .pdf файлы).

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Из документов:

*.java Соответствует пути, представляющему имя файла, оканчивающееся на .java

Таким образом, сопоставитель пути для glob:*.java будет возвращать true только для фактических имен файлов (например, x.pdf), которые возвращаются Path.getFileName () , например.

Возможным решением вашей проблемы итерации файлов PDF в каталоге без подкаталогов может быть ограничение глубины обхода файлового дерева вместо изменения поведения средства сопоставления.

Path start = Paths.get("C:/Users/maxim/Desktop/test/");
PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:**.pdf");
Files.walk(start, 1)
    .filter(matcher::matches)
    .forEach(System.out::println);
0 голосов
/ 02 мая 2018

Проблема в использовании glob patterns.

Используйте FileSystems.getDefault().getPathMatcher( "glob:*.pdf") вместо FileSystems.getDefault().getPathMatcher( "glob:**.pdf").

Ниже приводится выдержка из Javadoc :

Следующие правила используются для интерпретации шаблонов глобуса:

  • Символ * соответствует нулю или более символов компонента имени без пересечения границ каталога .
  • ** символы соответствуют нулю или более символов , пересекающим границы каталога .
...