package Recursive;
import java.io.File;
import java.util.Scanner;
public class Exercise18_29 {
public static void main(String[] args) {
System.out.print("Enter a directory or a file: ");
File file = new File(new Scanner(System.in).nextLine());
System.out.println("The number of file(not include directories) is " + getFileAmount(file));
}
/** 返回文件数量 */
public static long getFileAmount(File file) {
long fileAmount = 0;
if (file.isFile()) //如果是文件
fileAmount++;
else { //否则,如果是目录
for (File file1 : file.listFiles()) //遍历目录,并递归调用本方法
fileAmount += getFileAmount(file1);
}
return fileAmount;
}
}
package revision;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Objects;
import java.util.Queue;
/**
* @create: 2023/10/25
* @Description:
* @FileName: Main
*/
public class Main {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) {
System.out.print("Enter a directory: ");
System.out.println("Number of files: " + numberOfFiles(new File(reader.readLine())));
} catch (IOException e) {
e.printStackTrace();
}
}
/** 获取目录下文件数 */
private static int numberOfFiles(String pathname) {
File dir = new File(pathname);
if (!dir.exists() || !dir.isDirectory()) { // 不存在或非目录,抛出异常
throw new IllegalArgumentException("File does not exist or not a directory");
}
int count = 0; // 文件数
Queue<File> queue = new LinkedList<>(); // 存储目录队列
queue.offer(dir);
while (!queue.isEmpty()) {
// 遍历目录
for (File file : Objects.requireNonNull(queue.poll().listFiles())) {
if (file.isDirectory()) queue.offer(file);
else ++count;
}
}
return count;
}
private static int numberOfFiles(File file) {
if (file.isFile()) return 1;
int count = 0;
for (File listFile : Objects.requireNonNull(file.listFiles())) {
count += numberOfFiles(listFile);
}
return count;
}
}