题目描述
给定一个文件目录的路径,写一个函数统计这个目录下所有的文件数量并返回。隐藏文件也算,但是文件夹不算 。
栈实现和堆实现(方法都一样)
import java.io.File;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
public class CountFiles {
// 注意这个函数也会统计隐藏文件
//栈实现
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;
}
//堆实现
public static int getFileNumber2(String folderPath) {
File root = new File(folderPath);
if (!root.isDirectory() && !root.isFile()) {
return 0;
}
if (root.isFile()){
return 1;
}
Queue<File> queue = new LinkedList<>();
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;
}
public static void main(String[] args) {
// 你可以自己更改目录
String path = "F:\\算法";
System.out.println(getFileNumber(path));
if (getFileNumber(path) == getFileNumber2(path)){
System.out.println("成功");
}else {
System.out.println("失败");
}
}
}