Files.newDirectoryStream с рекурсивным фильтром

У меня был следующий код:

Path dir = Paths.get("My root dir/Folder1");
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, "*.xml")) {
        for (Path entry : stream) {
            // Do something
        }
} catch (IOException e) {
        //
}

Теперь структура папок изменилась, и я могу иметь оба:

My root dir
-- Folder1
---- MyFile.xml

или же

My root dir
-- Folder1_MyFile.xml

Поэтому я хотел бы иметь возможность использовать следующий код:

Path dir = Paths.get("My root dir/Folder1");
String pattern = "Folder1/*.xml"; // or "Folder1_*.xml"
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, pattern)) {
        for (Path entry : stream) {
            // Do something
        }
}

В этом случае мне нужно будет только изменить pattern переменная, со значением "Folder1/*.xml" или же "Folder1_*.xml", Первый ("Folder1/*.xml") не работает, потому что Files.newDirectoryStream не является рекурсивным и только пытается сопоставить файлы / папки на первом уровне в dir папка.

Есть ли способ использовать Files.newDirectoryStream(Path dir, String glob) метод таким образом (рекурсивная фильтрация файлов) или я должен сделать сам рекурсивный метод, который извлекает ВСЕ файлы / папки и вручную их фильтрует? (Я бы предпочел не использовать внешние библиотеки)

Благодарю.

0 ответов

Другие вопросы по тегам