题目 给定一个文件目录的路径,统计这个目录下所有的文件数并返回 分析 这道题很容易想到深搜或者广搜,不仅考察了对搜索算法的应用,还考察了对文件的操作,这道题在面试的时
给定一个文件目录的路径,统计这个目录下所有的文件数并返回
分析这道题很容易想到深搜或者广搜,不仅考察了对搜索算法的应用,还考察了对文件的操作,这道题在面试的时候还是很常见的
直接看代码吧,边看注释边讲。
深度搜素:
public static int dfs(String folderPath) {
File root = new File(folderPath);
// 如果传过来的参数不是目录,直接返回 0
if (!root.isDirectory()) {
return 0;
}
// 如果传过来的路径是一个文件,直接返回 1
if (root.isFile()) {
return 1;
}
// 创建一个栈,把传过来的目录入栈
Stack<File> stack = new Stack<>();
stack.push(root);
int files = 0;
while (!stack.isEmpty()) {
File folder = stack.pop();
// 去遍历目录下的所有文件
for (File file : folder.listFiles()) {
// 如果 file 是目录就入栈,是文件就 files++
if (file.isDirectory()) {
stack.push(file);
} else if (file.isFile()) {
files++;
}
}
}
return files;
}
广度搜索:
public static int bfs(String folderPath) {
File root = new File(folderPath);
// 如果传过来的参数不是目录,直接返回 0
if (!root.isDirectory()) {
return 0;
}
// 如果传过来的路径是一个文件,直接返回 1
if (root.isFile()) {
return 1;
}
// 创建一个队列
Deque<File> queue = new LinkedList<>();
queue.add(root);
int files = 0;
// 遍历队列
while (!queue.isEmpty()) {
// 从队头取出一个 folder
File folder = queue.pollFirst();
// 遍历这个 folder 的子目录,是目录就加到队尾,是文件 files++
for (File file : folder.listFiles()) {
if (file.isDirectory()) {
queue.addLast(file);
} else if (file.isFile()) {
files++;
}
}
}
return files;
}