Как получить имя папки и имя файла с помощью Files.walk - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть сценарий, в котором мне нужно получить имя папки и имя файла, используя Files.walk одновременно.

Ниже находится каталог: c: \ files \ foldername1 \ filename1.txt c: \ files \ foldername2 \ filename2.txt

Следующий код дает выходные данные, которые являются именами файлов

c:\\files\foldername1\\filename1.txt
c:\\files\foldername2\\filename2.txt

try (Stream<Path> walk = Files.walk(Paths.get("c:\\files"))) {
List<String> result = walk.filter(Files::isRegularFile)
          .map(x -> x.toString()).collect(Collectors.toList());
}

Следующий код дает выходные данные, которые являются каталогами

c:\\files\foldername1
c:\\files\foldername2

    try (Stream<Path> walk = Files.walk(Paths.get("c:\\files"))) {

        List<String> result = walk.filter(Files::isDirectory)
                .map(x -> x.toString()).collect(Collectors.toList());

        result.forEach(System.out::println);
}

Есть ли способ получить имя папки и имя файла, используя один фильтр одновременно.

1 Ответ

1 голос
/ 18 апреля 2020

Это:

Map<Path, List<Path>> files = walk.filter(Files::isRegularFile).collect(Collectors.groupingBy(Path::getParent))

даст вам Map от List с до Path с. Ключи карты будут путями родительского каталога. Значения карты будут списками всех файлов, которые включены в каталог, который соответствует ключу записи карты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...