键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中文件个数和文件夹个数。 【复杂:统计每种类型的文件个数】
时间: 2023-08-02 17:10:39 浏览: 56
好的,我知道你的问题了。以下是一个Java程序,可以实现你的要求:
```java
import java.io.File;
public class CountFiles {
public static void main(String[] args) {
// 读取文件夹路径
System.out.print("请输入文件夹路径:");
String path = System.console().readLine();
File folder = new File(path);
// 统计文件夹和文件个数
int folderCount = 0;
int fileCount = 0;
int[] fileTypeCount = new int[10]; // 统计文件类型的个数,最多支持10种类型
countFolderAndFiles(folder, fileTypeCount, folderCount, fileCount);
// 输出结果
System.out.println("文件夹个数:" + folderCount);
System.out.println("文件个数:" + fileCount);
for (int i = 0; i < fileTypeCount.length; i++) {
if (fileTypeCount[i] > 0) {
System.out.println("文件类型" + i + "的个数:" + fileTypeCount[i]);
}
}
}
private static void countFolderAndFiles(File folder, int[] fileTypeCount, int folderCount, int fileCount) {
if (folder.isDirectory()) {
folderCount++;
File[] files = folder.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
countFolderAndFiles(file, fileTypeCount, folderCount, fileCount);
} else {
fileCount++;
String fileName = file.getName();
int fileType = getFileType(fileName);
if (fileType >= 0) {
fileTypeCount[fileType]++;
}
}
}
}
}
}
private static int getFileType(String fileName) {
int dotIndex = fileName.lastIndexOf(".");
if (dotIndex >= 0) {
String extension = fileName.substring(dotIndex + 1).toLowerCase();
String[] imageTypes = {"jpg", "jpeg", "png", "gif", "bmp"};
String[] videoTypes = {"avi", "mp4", "mov", "wmv", "flv"};
String[] audioTypes = {"mp3", "wav", "flac", "aac", "wma"};
String[] textTypes = {"txt", "doc", "docx", "pdf", "ppt"};
if (contains(imageTypes, extension)) {
return 1;
} else if (contains(videoTypes, extension)) {
return 2;
} else if (contains(audioTypes, extension)) {
return 3;
} else if (contains(textTypes, extension)) {
return 4;
} else {
return 5;
}
} else {
return -1;
}
}
private static boolean contains(String[] array, String value) {
for (String item : array) {
if (item.equals(value)) {
return true;
}
}
return false;
}
}
```
你只需要在命令行中编译并运行上述代码即可。注意:代码中使用了递归的方式来遍历文件夹和子文件夹,如果文件夹层级很深,可能会导致栈溢出。如果你需要处理大量的文件和文件夹,建议使用非递归的方式来实现。