键盘录入一个文件夹路径,
1) 统计该文件夹下的各种后缀名的文件的个数,例如:.txt有10个,.java有30个…
2) 如果文件夹下还有文件夹,请将所有层级文件夹下的文件及个数都列举出来(可以使用递归思想)
代码:
说明:这里直接写第二种情况,假设文件夹下还有文件夹,使用递归完成。
import java.io.File;
import java.io.FileNotFoundException;
import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;
public class TongjiWenjian {
public static void main(String[] args) throws FileNotFoundException {
//键盘录入一个文件夹路径
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个文件夹路径:");
String path = sc.next();
//获取文件
File file = new File(path);
HashMap<String, Integer> map = new HashMap<>();
//调用方法获取结果集合
map = getFileCount(file,map);
//遍历输出集合
getMapEle(map);
}
//获取到文件列表,循环判断是否为文件夹,如果是文件夹,递归继续执行方法,如果不是,分割文件名,存入集合
private static HashMap<String, Integer> getFileCount(File file, HashMap<String, Integer> map) {
File[] f = file.listFiles();
for (File f2 : f) {
if (f2.isFile()) {
String fileName = f2.getName();
//截取文件名,把文件名和后缀分开
String[] ss = fileName.split("\\.");
String fileEnd = ss[ss.length-1];
if (map.containsKey(fileEnd)) {
//判断如果集合中已存在,就在后面+1
map.put(fileEnd, map.get(fileEnd)+1);
}else {
//不存在设置第一次
map.put(fileEnd, 1);
}
}else {
//递归,对文件夹继续调用方法
getFileCount(f2,map);
}
}
//返回结果值
return map;
}
//遍历输出集合
private static void getMapEle(HashMap<String, Integer> map) {
//获取key值存进Set集合
Set<String> set = map.keySet();
//遍历循环
for (String key : set) {
Integer value = map.get(key);
System.out.println(key+"====="+value);
}
}
}
结果:
总结:掌握使用split方法分割字符串。
使用map集合存储这些需要统计出现次数的情况,特别是未知情况。最后是递归的使用,针对未知情况。