使用递归,根据输入文件夹路径,返回该文件夹下的文件类型以及对应的数量
- 创建一个方法,目的是拿到文件夹路径下所有的文件(无论是文件还是目录)进行判断,返回所有的文件类型和数量。
package com.xiahk;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
public class Test3 {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
Scanner sc = new Scanner(System.in);
System.out.println("输入文件夹路径");
File file = new File(sc.nextLine());
getFile(file, map);
Set<String> keySet = map.keySet();
for (String string : keySet) {
System.out.println(string + "类型的文件有 " + map.get(string) + "个");
}
}
- 首先获得文件夹路径,将路径下的所有文件转换成File[]数组,在遍历该数组。遍历是判断File对象是否为文件,是的话就拿到文件的后缀名。
- 在Map集合内查看是否存在该类型文件后缀,如果没有便放到集合中,对应的值设置为1。存在的话就拿到对应的值加一再放进去。
- 如果是文件夹的话,我们可以使用递归,调用本身的方法。
- 返回Map集合,遍历便可拿到所有的文件类型以及对应的数量。
public static void getFile(File file, Map<String, Integer> map) {
File[] files = file.listFiles();
for (File f2 : files) {
// 如果是文件
if (f2.isFile()) {
String name = f2.getName();
// 获取文件的后缀名
String[] split = name.split("\\.");
int length = split.length;
String key = split[length - 1];
// 判断是否存在
boolean iskey = map.containsKey(key);
if (iskey) {
map.put(key, map.get(key) + 1);
} else {
map.put(key, 1);
}
}
// 如果是文件夹
if (f2.isDirectory()) {
getFile(f2, map);
}
}
}
}
例如查看 E:\HBuilder 下的所有文件类型和数量
以上是博主目前初学Java写的,可能会有一些问题或者说有更好的方法来实现功能,希望大家可以留言互相交流。