统计目录下的文件数量

简介: 统计目录下的文件数量

统计目录下的文件数量

给定一个文件目录的路径,
写一个函数统计这个目录下所有的文件数量并返回
隐藏文件也算,但是文件夹不算

一、深度优先搜索

用找做
根目录入栈栈中弹出一个目录,它下面有,e,f两个目录,先压e,后压f,
接下来f弹出,下级只有j,没有文件,
接下来e弹出,e下只有两个文件, count++变成6,
接下来h弹出,有一个文件count++,变成7个文件

    public static int getFileNumber(String folderPath) {
        File root = new File(folderPath);
        if (!root.isDirectory() && !root.isFile()) {
            return 0;
        }
        if (root.isFile()) {
            return 1;
        }
        Stack<File> stack = new Stack<>();
        stack.add(root);
        int files = 0;
        while (!stack.isEmpty()) {
            File folder = stack.pop();
            for (File next : folder.listFiles()) {
                if (next.isFile()) {
                    files++;
                }
                if (next.isDirectory()) {
                    stack.push(next);
                }
            }
        }
        return files;
    }

二、宽度优先遍历

准备一个队列从头进从尾出,
比如A这个文件夹,放入队列里
1)从队列里弹出一个东西,弹出的文件夹叫current,展开的过程中来的宽度优先遍历是文件的count++,如果遇到了文件夹,放入队列里去,又遇到文件夹,放入队列里去宽度有限遍历过程中遇到的文件就直接count++,往队列里只放文件夹
2)遇到文件就count++,遇到文件夹就往队列里放周而复始结束

    public static int getFileNumber2(String folderPath) {
        File root = new File(folderPath);
        if (!root.isDirectory() && !root.isFile()) {
            return 0;
        }
        if (root.isFile()) {
            return 1;
        }
        LinkedList<File> queue = new LinkedList<File>();
        queue.add(root);
        int files = 0;
        while (!queue.isEmpty()) {
            File folder = queue.poll();
            for (File next : folder.listFiles()) {
                if (next.isFile()) {
                    files++;
                }
                if (next.isDirectory()) {
                    queue.add(next);
                }
            }
        }
        return files;
    }
相关文章
|
Java API 开发工具
如何用阿里云 oss 下载文件
阿里云对象存储服务(OSS)提供了多种方式下载文件,以下讲解下各种方式的下载方法
9652 2
|
存储 缓存 虚拟化
PCIe地址转换服务(ATS)详解
PCIe地址转换服务(ATS)详解
3175 1
PCIe地址转换服务(ATS)详解
|
存储 JSON Kubernetes
查看k8s的etcd数据
查看k8s的etcd数据
1959 0
查看k8s的etcd数据
|
12月前
|
数据采集 SQL DataWorks
DataWorks不是Excel,它是一个数据集成和数据管理平台
【10月更文挑战第5天】本文通过一家电商平台的案例,详细介绍了阿里云DataWorks在数据处理全流程中的应用。从多源数据采集、清洗加工到分析可视化,DataWorks提供了强大的一站式解决方案,显著提升了数据分析效率和质量。通过具体SQL示例,展示了如何构建高效的数据处理流程,突显了DataWorks相较于传统工具如Excel的优势,为企业决策提供了有力支持。
354 3
|
SQL Oracle Java
Weblogic12C概述及安装
Weblogic12C概述及安装
1124 0
Weblogic12C概述及安装
|
负载均衡 并行计算 算法
BWA序列比对方法丨针对较大基因组的并行计算和性能优化方式,利用多线程和负载均衡策略提高效率
BWA序列比对方法丨针对较大基因组的并行计算和性能优化方式,利用多线程和负载均衡策略提高效率
|
人机交互 iOS开发
iOS音视频入门AVAudioSession
`AVAudioSession`是苹果用来管理App对音频硬件(I / O)的资源使用;比如说: - 设置APP与其他APP是否混音,或者中断、降低其他App声音 - 手机静音下,APP是否可以播放声音 - 指定音频输入或者输出设备 - 是否支持APP录制,是否可以边录制边播放 - 声音中断的优先级(电话接入中断APP音频处理)
iOS音视频入门AVAudioSession
|
Python
VSCode 配置快速输入Python的Main函数方法
VSCode 配置快速输入Python的Main函数方法
2571 0
VSCode 配置快速输入Python的Main函数方法
从支付宝公关朋友圈看阿里巴巴组织架构调整
7月12日,阿里集团宣布完成2019年中的新一轮组织架构调整。此轮组织架构调整,主要涉及HR线与财务线,产品和业务方面则包括闲鱼、淘宝直播及内容生态、支付宝的相互宝。
1142 0
|
SQL 关系型数据库 MySQL
MySQL 运维常用工具&命令
以下列出的是平常工作中用到的小工具和命令 连接 如何不需要密码的登录,直接mysql my.cnf 或者写在 ~/.my.cnf, 相对安全 [mysql] --表示: 只有mysql命令才能免密码 user=root password=123 socket=/tmp/mysql.
3278 0