给你一个文件夹,统计其下面的文件数量,包括子文件夹下面的文件

news2024/11/24 15:31:26

对于统计一个文件夹下面的文件的数量,大家第一反应肯定是递归调用来实现,现在有这么一个目录结构:root1和root2下面各有一个文件file1.txt和file2.txt,所以最终统计出来的文件数量应该是3

我们先看看递归实现:

    public static void countFiles(File file) {
        File[] files = file.listFiles();
        for (File file1 : files) {
            if (file1.isFile()) {
                fileCount++;
            } else {
                countFiles(file1);
            }
        }
    }

    @Test
    public void testCountFiles() {
        File root = new File("E:\\root");
        countFiles(root);
        System.err.println(fileCount);
    }

那么除了递归的方式,还有没有其他方法呢,答案是肯定的,我们知道递归的本质其实是在jvm的栈上分配方法栈帧,而jdk恰到好处的为我们提供了栈的实现,也就是java.util.Stack,那么就可以利用它来实现文件数量的统计了,直接看代码:

 public static int countFile(File file) {
        int count = 0;
        Stack<File> stack = new Stack<>();
        stack.add(file);
        while (!stack.isEmpty()) {
            File pop = stack.pop();
            if (pop.isFile()) {
                count++;
            }
            if (pop.isDirectory()) {
                File[] files = pop.listFiles();
                for (File file1 : files) {
                    stack.add(file1);
                }
            }
        }
        return count;
    }

    @Test
    public void testStack() {
        File root = new File("E:\\root");
        System.err.println(countFile(root));
    }

ps:其实这里不一定要用Stack,也可以用queue等集合都可以实现,与递归的方式相比,各有优缺点吧,如果文件夹的数量过多,递归可能会导致StackOverflow,第二种方式可能会导致oom

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1100519.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Plant Commun | 正交组、系统转录组和CUT-Tag发掘植物保守冷响应因子BBX29及其靶基因

植物以固着的方式生活&#xff0c;但它们并不完全被动&#xff0c;许多温带植物通过预暴露于非冻结低温来增加它们的抗冻性&#xff0c;这种适应性过程被称为冷驯化(CA)。越来越多的证据表明&#xff0c;低温下的许多生理和代谢变化是由于CA诱导的冷反应(COR)基因的表达。C-重复…

Android 远程调用服务之 AIDL

目录 一、AIDL 是什么&#xff1f;二、为什么要使用 AIDL&#xff1f; 1、使用 AIDL 是为了跨进程调用第三方服务&#xff1f; 2、使用 AIDL 是为了向第三方服务传输数据/参数&#xff1f; 3、使用 AIDL 是为了获取第三方服务直接或者异步返回的数据&#xff1f;三…

Linux性能优化--性能工具:磁盘I/O

6.0 概述 本章介绍的性能工具能帮助你评估磁盘I/O子系统的使用情况。这些工具可以展示哪些磁盘或分区已被使用&#xff0c;每个磁盘处理了多少I/O,发给这些磁盘的I/O请求要等多久才被处理。 阅读本章后&#xff0c;你将能够&#xff1a; 确定系统内磁盘I/O的总量和类型(读/写…

浅谈智能照明控制系统应用在城市轨道交通

叶根胜 江苏安科瑞电器制造有限公司 江苏江阴 214405 摘要&#xff1a;在传统的城市轨道交通设计方面&#xff0c;照明设计方案具有一定的弊端。随着计算机技术的发展&#xff0c;智能化技术渐渐步入人们的生活并成为主流&#xff0c;故在城市轨道交通中应用新型的照明控制设…

基于关联规则的多样化推荐技术应用研究

摘要 目录 第二章 相关理论介绍 2.2.1 当前常用推荐技术 关联规则推荐 2.3.1 关联规则相关概念

【java学习—七】Object类(36)

文章目录 1. 概念2. Object类中的主要方法 1. 概念 Object 类是所有 Java 类的根父类如果在类的声明中未使用 extends 关键字指明其父类&#xff0c;则默认父类为Object 类 public class Person {...}等价于&#xff1a;public class Person extends Object {...}例&#xff1…

新加坡服务器托管

新加坡是一个小而繁荣的国家&#xff0c;是东南亚唯一一个发达国家。它地理位置好&#xff0c;毗邻马来西亚和印度尼西亚&#xff0c;新加坡是一个拥有先进科技和强大经济的国家&#xff0c;主要以制造业、金融、旅游和航运为主&#xff0c;拥有先进的经济和现代化的基础设施&a…

计算机操作系统-第九天

1、虚拟机 传统计算机的特点&#xff1a;一台物理机器只能运行一个操作系统 虚拟机的特点&#xff1a; 使用虚拟化技术&#xff0c;将一台物理机器虚拟化为多台虚拟机器&#xff08;Virtual Machine&#xff0c;简称VM&#xff09;每个虚拟机都可以独立运行一个操作系统 虚拟…

大数据学习(12)-join优化common join

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博>主哦&#x…

数据结构知识点总结

一、常见的数据结构 数组&#xff0c;栈&#xff0c;队列&#xff0c;链表&#xff0c;散列表&#xff0c;二叉树&#xff0c;堆&#xff0c;跳表&#xff0c;图&#xff0c;树。 1. 数组&#xff1a; 数组的元素在内存中存储是连续存放的&#xff0c;占有连续的存储单元&am…

AWS S3加密

Hello大家好&#xff61; 在本课时我们将讨论S3加密相关的内容。 S3加密相关是认证考试的一个重要的主题考点&#xff0c;您需要了解亚马逊S3的几种不同类型的加密方式。| 首先是静态数据的加密&#xff0c;静态数据加密是指数据存储在亚马逊S3 数据中心的磁盘上时&#xff0…

Excel文档名批量翻译不求人

在我们的日常工作中&#xff0c;经常需要处理大量的文件&#xff0c;包括Excel文档。有时候&#xff0c;我们需要对文件名进行修改或者翻译&#xff0c;以便更有效地进行文件管理和数据统计。那么&#xff0c;如何高效地翻译Excel文档名呢&#xff1f;下面是一个实用的方法。 首…

感测型离子风机在线实时监测

感测型离子风机在线实时监测静电是指通过安装静电监测器和数据采集设备&#xff0c;对离子风机所处环境的静电情况进行实时监测和数据采集&#xff0c;以便及时发现并解决静电问题。 感测型离子风机在线实时监测静电可以实现以下功能&#xff1a; 实时监测离子风机所处环境的静…

【FreeRTOS】【STM32】06.1 FreeRTOS的使用1(对06的补充)

前后台系统(裸机) 裸机又称前后台系统&#xff0c;在一个while中不停循环处理各个task。 中断服务函数作为前台程序 大循环while(1)作为后台程序 多任务系统 通过任务调度的方式&#xff0c;执行各个任务&#xff0c;优先级高的先执行&#xff0c;执行完了释放CPU使用权&am…

智慧工地管理系统(Smart site management system)源码

智慧工地管理系统是面向建筑工程施工企业提供的工地智能交互平台&#xff0c;基于云计算、物联网、人工智能等技术的应用&#xff0c;对现场人员、材料、机械、质量、安全等进行高效管控&#xff0c;以实现项目管理人员对现场的实时把控、及时预警、精准决策&#xff0c;从而为…

Golang学习:基础篇练习(二)—— 数组切片小实验

Golang学习&#xff1a;基础篇练习&#xff08;二&#xff09;—— 数组切片小实验 本次实验是对数组切片的&#xff0c;目的就是为了加深理解&#xff0c;一起来看看吧。 1、下面这段代码有问题吗&#xff1f;为什么 func main() {greeting : make([]string, 3, 5)// 3 is len…

FPGA基于1G/2.5G Ethernet PCS/PMA or SGMII实现 UDP 网络视频传输,提供工程和QT上位机源码加技术支持

目录 1、前言版本更新说明免责声明 2、我这里已有的以太网方案3、设计思路框架视频源选择OV5640摄像头配置及采集动态彩条UDP协议栈UDP视频数据组包UDP协议栈数据发送UDP协议栈数据缓冲IP地址、端口号的修改Tri Mode Ethernet MAC1G/2.5G Ethernet PCS/PMA or SGMIIQT上位机和源…

08-网络篇-一步步完成网络通信

上面的章节描述了Tcp/ip四层网络模型&#xff0c;并介绍了每一层的常见的协议&#xff0c;本章来讨论一下&#xff0c;一个主机是怎样与外网中的另一个主机通信。 假如网络结构如下 上图是一个典型的网络结构图&#xff0c;若主机1是电脑&#xff0c;主机4是服务器&#xff0c;…

申请者用Chat GPT写申请文书?国外大学纷纷采取措施

近来&#xff0c;人工智能聊天机器人ChatGPT实火。ChatGPT拥有强大的信息整合能力、自然语言处理能力&#xff0c;可谓是“上知天文&#xff0c;下知地理”&#xff0c;而且还能根据要求进行聊天、撰写文章等。 ChatGPT一经推出&#xff0c;便迅速在社交媒体上走红&#xff0c…

NTP时间同步协议

NTP net working protocol网络时间同步协议概述 同步互联网中主机和路由器之间的时钟在局域网上提供亚毫秒精度&#xff0c;在广域网上提供几十毫秒精度冗余服务器和多种网络路径保证了可靠性工程算法用于减少抖动&#xff0c;缓解多个源和避免不正确操作的服务器 How NTP wo…