文件夹目录中的子文件夹数

Posted

技术标签:

【中文标题】文件夹目录中的子文件夹数【英文标题】:Number of subfolders in a folder directory 【发布时间】:2013-08-20 10:35:43 【问题描述】:

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

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

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

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

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

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

//what is numberOfSubfolders in testfolder?

感谢所有帮助。

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

您能解释一下这个答案与accepted answer 有何不同吗?此代码还计算子文件夹的数量吗?它似乎计算了所有文件。【参考方案2】:

您可以使用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);

Java File 类是Composite Design Pattern 的一个示例,因此您必须实际询问该实例是文件: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

【讨论】:

太棒了!正是我需要的。谢谢! 好答案。但是有没有办法获得实际的最大深度?【参考方案3】:

试试这个:

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);

【讨论】:

【参考方案4】:

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

然后统计结果。

【讨论】:

以上是关于文件夹目录中的子文件夹数的主要内容,如果未能解决你的问题,请参考以下文章

Apache2中的子文件夹目录浏览

是否可以将 iOS 文件共享功能限制为文档目录中的子文件夹?

如何从子目录加载张量流中的数据

如何从 Python 中的子文件夹导入模块或文件?

命令列出文件夹中的所有文件以及窗口中的子文件夹

在 Compass 项目目录结构中使用 Sass 部分的子文件夹