我期待这段代码使用来自java.nio.File
的Java 8的Files#find方法返回当前目录的所有子目录的计数:
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.我的误解在哪里?
答案 0 :(得分:1)
查看Files#find
的文档:第三个参数是用于确定文件是否应包含在返回的流中的函数。您没有在dirs
列表中添加任何内容。
尝试使用matcher函数过滤目录:
List<Path> found = Files.find(start,
Integer.MAX_VALUE,
(path, basicFileAttributes) -> path.toFile().isDirectory()).collect(Collectors.toList());
java.lang.System.out.println(found.size());
答案 1 :(得分:1)
Files.find
会返回您尚未消耗的流,因此您传递的lambda将文件添加到未执行的目录中。
应该使用流,尝试以下
`
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() );
}
答案 2 :(得分:-1)
您可以使用File.isDirectory()
来计算它们:
static int countSub(File[] directory) {
int total = 0;
for (File files : directory) {
if (files.isDirectory()) {
total++;
}
}
return total;
}