题目
给定一个文件目录的路径,写一个函数统计这个目录下所有的文件数量并返回,隐藏文件也算,但是文件夹不算
方法思路
1.队列实现(广度优先搜索BFS)
- 使用队列来按层级遍历目录结构
- 从根目录开始,将其加入队列
- 循环处理队列中的每个目录,列出其所有子项
- 如果是文件,计数器加1;如果是目录,加入队列继续处理
2.栈实现(深度优先搜索DFS)
- 使用栈来实现深度优先遍历
- 从根目录开始,将其压入栈
- 循环处理栈顶元素,列出其所有子项
- 如果是文件,计数器加1;如果是目录,压入栈继续处理
代码实现
方法一:队列实现
public static int countFileWithQueue(String path){
File rootDir = new File(path);
if(!rootDir.exists() || !rootDir.isDirectory()){
throw new IllegalArgumentException("路径不存在或不是目录:" + path);
}
int count = 0;
Queue<File> queue = new LinkedList<>();
queue.add(rootDir);
while (!queue.isEmpty()){
File currentDir = queue.poll();
File[] files = currentDir.listFiles();
if(files != null){
for (File file : files){
if(file.isFile()){
count++;
}else if(file.isDirectory()){
queue.add(file);
}
}
}
}
return count;
}
方法二:栈实现
public static int countFileWithStack(String path){
File rootDir = new File(path);
if(!rootDir.exists() || !rootDir.isDirectory()){
throw new IllegalArgumentException("路径不存在或不是目录:" + path);
}
int count = 0;
Stack<File> stack = new Stack<>();
stack.push(rootDir);
while (!stack.isEmpty()){
File currentDir = stack.pop();
File[] files = currentDir.listFiles();
if(files != null){
for (File file : files){
if(file.isFile()){
count++;
}else if(file.isDirectory()){
stack.push(file);
}
}
}
}
return count;
}

被折叠的 条评论
为什么被折叠?



