java nio files.输入计数子目录



我期望使用Java 8的文件#从java.nio.File查找方法返回当前目录的所有子目录的计数:

public static void main(String[] args) throws IOException {
    List<File> dirs = new LinkedList<File>();
    Files.find(Paths.get("."),
               Integer.MAX_VALUE,
               (path, basicFileAttributes) -> dirs.add(path.toFile()));
    System.out.println(dirs.size());
}

但是,它总是输出0。我的误解在哪里?

Files.find返回流,您尚未消耗它,因此您传递的lambda将文件添加到未执行的dirs中。应消耗流,尝试以下

`

public static void main(String[] args) throws IOException {
      List<File> dirs = new LinkedList<File>();
      Files.find(Paths.get("."),
             Integer.MAX_VALUE,
            (path, basicFileAttributes) -> 
      dirs.add(path.toFile())).forEach((ignore)->{});
     java.lang.System.out.println( dirs.size() );
}

请查看Files#find的文档:第三个参数是用于决定是否应将文件包含在返回的流中的函数。您没有将任何内容添加到dirs列表中。

尝试以目录的匹配器函数过滤:

    List<Path> found = Files.find(start,
            Integer.MAX_VALUE,
            (path, basicFileAttributes) -> path.toFile().isDirectory()).collect(Collectors.toList());
    java.lang.System.out.println(found.size());

您可以使用File.isDirectory()来计数它们:

static int countSub(File[] directory) {
    int total = 0;
    for (File files : directory) {
        if (files.isDirectory()) {
            total++;
        }
    }
    return total;
}

最新更新