统计目录下的文件数量_假如e盘中有一个多级目录,统计出每层目录下的文件个数。-程序员宅基地

技术标签: 算法  数据结构  


统计目录下的文件数量

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

一、深度优先搜索

在这里插入图片描述
用找做
根目录入栈栈中弹出一个目录,它下面有,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;
	}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xiaolu567/article/details/125619577

智能推荐

计算机基础知识判断题答案,计算机基础知识试题及答案判断题模板.docx-程序员宅基地

文章浏览阅读1.5k次。优质文档PAGE 页码页码/NUMPAGES 总页数总页数计算机基础知识试题及答案判断题(一)1、 冯?诺依曼原理是计算机的唯一工作原理。.( × )2、 计算机能直接识别汇编语言程序。.( × )3、 计算机能直接执行高级语言源程序。.( × )4、 计算机掉电后,ROM中的信息会丢失。( × )5、 计算机掉电后,外存中的信息会丢失。( √ )6、 应用软件的作用是扩大计算机的存储容量。( ×..._计算机判断题及答案

最新全流程GMS地下水数值模拟及溶质(包含反应性溶质)运移模拟技术深度应用-程序员宅基地

文章浏览阅读704次,点赞30次,收藏18次。最新全流程GMS地下水数值模拟及溶质(包含反应性溶质)运移模拟技术深度应用_gms地下水数值模拟

Android 自定义横向进度条_android自定义横向进度条-程序员宅基地

文章浏览阅读2.4k次。private int max; private double progress; private int bgColor; private int progressColor; private int padding; private boolean openGradient; private int gradientFrom; private int gradientTo; private boolean showSecondProgres_android自定义横向进度条

宝塔打开后,内容渲染失败(405)【了解一下】_宝塔部署后405 not allowed-程序员宅基地

文章浏览阅读111次。如果你是以上这种情况,打开以后发现,数据渲染不上,很可能是因为你的配置反向代理的顺序搞错了,造成的结果就是反向代理没有替换成功!还是那些内容,只是改变了操作步骤;数据就能加载出来了!_宝塔部署后405 not allowed

联想计算机管理员权限设置,Windows XP系统如何新建administrator管理员权限账户-程序员宅基地

文章浏览阅读1.6k次。知识点分析:对于Windows XP系统,有很多种创建用户账户的操作方法。其中包括:使用CMD命令行的net命令进行,也可以使用控制面板的图形界面进行,还可以使用计算机管理控制台中的“本地用户和组”进行。其中后者自定义功能多,本文以此为例进行操作示范。操作步骤:1. 在系统桌面找到并使用鼠标右键点击“我的电脑”图标,然后在弹出菜单中选择“管理(G)”,如下图所示:2. 在弹出的计算机管理窗口,展开..._xp 开启管理员账户

socket 及 websocket的握手过程_websocket三次握手详解-程序员宅基地

文章浏览阅读6k次。一、WebSocket和HTTP之间的关系WebSocket和HTTP一样都是基于TCP的应用层协议。WebSocket协议和HTTP协议是两种不同的东西。客户端开始建立WebSocket连接时要发送一个header标记了 Upgrade的HTTP请求,表示请求协议升级。所以服务器端做出响应的简便方法是,直接在现有的HTTP服务器软件和现有的端口上实现WebSocket协议,然后再回一个状态..._websocket三次握手详解

随便推点

C#版的抓包软件_c# winpcap-程序员宅基地

文章浏览阅读5.4k次,点赞3次,收藏27次。NetAnalyzer实现结构在上一篇中介绍一点VC++开发环境的配置,与基本的运行方式。因为NetAnalyzer使用的C#作为开发语言,所以在此主要介绍一些在C#环境下的开发环境的配置,与一些基本开发情况,力求在完成本篇后后,读者可以制作一个简单的抓包程序。在开始编程前先要介绍连个.Net类库SharpPcap.dll与PacketDotNet.dll。在2004年Tamir _c# winpcap

Unity中批量修改图片导入设置及修改图集的设置_unity立绘整合怎么修改-程序员宅基地

文章浏览阅读4.3k次,点赞2次,收藏5次。Unity中批量设置图片导入设置,编辑器扩展_unity立绘整合怎么修改

【CC2650】——电池电量报文显示_csdn电源耗电量报文-程序员宅基地

文章浏览阅读660次。CC2650 电量 百分比 广播_csdn电源耗电量报文

pyqt5菜鸟教程_PyQt5教程(一)——第一个PyQt5程序-程序员宅基地

文章浏览阅读7.4w次,点赞15次,收藏78次。在这部分教程中我们将学习PyQt5的一些基本功能一个简单的例子这是一个只显示一个小窗口的简单示例。但我们可以对这个窗口进行一些操作,如调整尺寸,最大化或最小化。这需要编写很多代码,但有人已经完成了这个功能。因为它在多种程序中的通用性,所以不再需要重复编码。PyQt5是一个高级工具集。如果我们使用较低级的工具集进行编码,要实现这个功能最少也要上百行代码。#!/usr/bin/python3# -*-..._pyqt5菜鸟教程

acwing.188.逆序对数量_acwing 逆序对的数量-程序员宅基地

文章浏览阅读93次。逆序对数量(归并排序应用)给定一个长度为 n 的整数数列,请你计算数列中的逆序对的数量。逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i<j 且 a[i]>a[j],则其为一个逆序对;否则不是。输入格式第一行包含整数 n,表示数列的长度。第二行包含 n 个整数,表示整个数列。输出格式输出一个整数,表示逆序对的个数。数据范围1≤n≤100000输入样例:62 3 4 5 6 1输出样例:5#include<iostream>using_acwing 逆序对的数量

Spark学习笔记_sparksession.read()-程序员宅基地

文章浏览阅读684次。一、安装1、上传并解压。2、修改spark/conf/spark_env.sh:export JAVA_HOME=/usr/jdk1.8.0_152/export SPARK_MASTER_IP=hadoop1 expart SPARK_MASTER_PORT=7077 export HADOOP_CONF_DIR=/usr/ha..._sparksession.read()