3

我有一个包含数据文件(.txt等)和子文件夹的文件夹。

在 Java 中,我将如何完成获取任何指定目录路径中的子文件夹数量?

(所以不包括数据文件;只计算子文件夹)

我已阅读有关计算文件数量的信息,.txt但似乎找不到任何有关仅计算子文件夹的信息。

我不知道从哪里开始,但给你一个想法:

String directory = "C:\Users\ . \Desktop\ . \workspace\src\testfolder";
int numberOfSubfolders;

//what is numberOfSubfolders in testfolder?

所有帮助表示赞赏。

4

4 回答 4

14

您可以使用FileFilter仅列出目录:

File file = new File("/tmp");
File[] files = file.listFiles(new FileFilter() {
    @Override
    public boolean accept(File f) {
        return f.isDirectory();
    }
});
System.out.println("Folders count: " + files.length);

JavaFile类是复合设计模式的一个示例,因此您必须实际询问该实例它是文件:isFile()还是目录isDirectory()

如果您想计算目录,并且您正在使用 Java 8.Files.find函数,可以以更简洁的方式(实际上是单行)做同样的事情:

long count = Files.find(
    Paths.get("/tmp"), 
    1,  // how deep do we want to descend
    (path, attributes) -> attributes.isDirectory()
).count() - 1; // '-1' because '/tmp' is also counted in
于 2013-08-18T14:32:13.393 回答
3

使用File该类,您可以列出其中的文件(如果它是文件夹/目录),您可以按所需的属性进行过滤(isDirectory()

然后计算结果。

于 2013-08-18T14:27:51.260 回答
1

试试这个:

File dir = new File("yourDirPath");
int numberOfSubfolders;
File listDir[] = dir.listFiles();
for (int i = 0; i < listDir.length; i++) {
    if (listDir[i].isDirectory()) {
            numberOfSubfolders++;
        }
}
System.out.println("No of dir " + numberOfSubfolders);
于 2013-08-18T14:32:45.457 回答
-1

当我看到在上面的解决方案中完全没有用的 for 循环时,我感到非常害怕。把它剪下来然后做:

File dir = new File("yourDirPath");
File listDir[] = dir.listFiles();
int numberOfSubfolders = listDir.length;

这不仅将代码减半,而且迭代次数也大大减少,因为随着目录数量的增加,您将更多地运行 for 循环。这只运行一次。

于 2021-11-30T16:53:04.477 回答