【问题标题】:How to get folder name and filename using Files.walk如何使用 Files.walk 获取文件夹名称和文件名
【发布时间】:2020-04-18 06:21:06
【问题描述】:

我有一个场景,我需要同时使用 Files.walk 获取文件夹名称和文件名。

下面是目录: c:\文件\文件夹名1\文件名1.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);
}

有没有办法同时使用一个过滤器获取文件夹名和文件名。

【问题讨论】:

  • 放弃您的过滤器或同时包含两者的过滤器。
  • 如果我不使用过滤器,我的输出是 c:\\files\foldername1 c:\\files\foldername2
  • 您希望您的步行结果同时包含文件夹和常规文件吗?还是您只想访问常规文件,并知道每个常规文件所在的文件夹?

标签: java file


【解决方案1】:

这个:

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

会给你一个MapLists 到Paths。地图的键将是父目录路径。映射的值将是包含在与映射条目的键对应的目录中的所有文件的列表。

【讨论】:

    猜你喜欢
    • 2012-10-24
    • 2021-02-03
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多