我期望使用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;
}