算法面试题总结之深度优先遍历

该代码段展示了一个Java函数,用于计算指定文件目录下的所有文件数量,包括隐藏文件但不包括子目录。它使用深度优先遍历策略,通过栈来存储待检查的文件或文件夹。当遍历到文件时,计数器增加;遇到目录,则将其添加到栈中继续遍历。在main方法中,函数被调用并打印出结果。

统计文件数量

  • 题目描述:给定一个文件目录的路径,编写一个函数统计该目录下所有的文件数量并返回(隐藏文件也算,但文件夹不算)
  • 解题思路:
    使用深度优先遍历(遍历过程中选用栈作为存储文件或文件夹的容器),遍历之前,先将头文件压栈(栈是否为空作为遍历完所有文件的判断标准),如果当前路径上是文件,计数器加1,如果当前路径上是文件夹,则遍历文件夹中的内容,判断是文件还是文件夹
public class CountFiles {

    public static int countFileNum(String folderPath){
        File root = new File(folderPath);
        if (root.isFile()){
            return 1;
        }
        // 如果如上判断,没有返回结果,可知root不是文件,则root可能是文件夹
        if (!root.isDirectory() && !root.isFile()){
            return 0;
        }
        // root是目录
        int count = 0;
        Stack<File> stack = new Stack<>();
        stack.push(root);
        while (!stack.isEmpty()){
            File cur = stack.pop();
            for (File next : cur.listFiles()) {
                if (next.isFile()){
                    count++;
                }
                if (next.isDirectory()){
                    stack.push(next);
                }
            }
        }
        return count;
    }

    public static void main(String[] args) {
        System.out.println(countFileNum("D:\\study_note"));
        System.out.println(countFileNum("D:\\study_note\\HeiMa"));
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值