思路:
遍历到所有的文件路径名
存入到集合中
遍历集合,拿到各种文件的后缀名,存入set集合
遍历set集合,统计各种后缀名出现的次数
import java.io.File;
import java.util.*;
public class T_统计文件夹各个后缀的个数 {
static TreeSet<String> pathtTail=new TreeSet<>();
static TreeMap<String, Integer> map = new TreeMap<>();
static ArrayList<String> allPath=new ArrayList<>();
public static void main(String[] args) {
System.out.println("请稍等");
File path = new File("D:/");
getAllPath(path); //得到所有路径
System.out.println("以得到所有路径.....\n\n");
getPathTail();
System.out.println("yi获取所有不同的文件类型的后缀......\n\n");
resout();
System.out.println("已经获取所有后缀的个数,放入map中......\n\n");
//查询map键值对
while (true) {
if ("end".equals(chaxun())) {
break;
}
}
//prin();
}
private static void prin() {
for (String s : map.keySet()) {
System.out.println(s + " " + map.get(s));
}
}
//查询用户指定的文件类型的个数。
private static String chaxun() {
Scanner sc = new Scanner(System.in);
System.out.println("请输入需要查询的后缀名称:");
String s = sc.nextLine();
if (map.keySet().contains(s)) {
int i = map.get(s);
System.out.println(s+"类型的文件有"+i+"个");
}else{
System.out.println("你输入的文件类型不存在");
}
return s;
}
//遍历TreeSet集合并统计集合里每个文件类型的个数
//把结果存入map集合里,供用户查询
private static void resout() {
int i = 0 ;
for (String s : pathtTail) {
for (String s1 : allPath) {
if (s1.endsWith(s)) {
i++;
}
}
map.put(s,i);
}
}
//此功能遍历allpath集合,并把string对象拆分,取到所有的文件类型
//并存储到TreeSet集合里
private static void getPathTail() {
for (String s : allPath) {
String[] split = s.split("\\.");
if (split.length>1) {
pathtTail.add(split[split.length-1]);
}
}
}
//递归遍历到文件夹下所有的文件,并存储到ArrayList数组内
private static void getAllPath(File path) {
if (path.exists()) { //判断路径是否存在
if (path.isFile()) { //判断是不是文件,是的话,得到其文件名。不是的话,就是目录
allPath.add(path.getName());
}else{
File[] files = path.listFiles(); //得到目录下所有的Fiel列表
if (files.length!=0) { //如果目录列表不为零,递归操作此列表里所有路径
for (File file : files) {
getAllPath(file);
}
}
}
}else{
System.out.println("文件路径不存在");
}
}
}