Java中File相关方法的综合小案例
需求:统计某确定文件夹下每种文件的个数并打印。(考虑路径下所有子文件夹)
public class test { public static void main(String[] args) { File file = new File("C:\\Users\\Lenovo\\Desktop\\test\\test\\aaa"); //自定义文件夹路径 HashMap<String, Integer> hm = getCount(file); //创建hashmap保存文件名和个数,键为文件名,值为个数 System.out.println(hm); } public static HashMap<String, Integer> getCount(File src){ HashMap<String, Integer> hm = new HashMap<>(); File[] files = src.listFiles(); //调用listFile()方法获取文件夹下所有内容 for (File file : files) { //增强for遍历src下每一个file对象 if(file.isFile()){ //判断file对象是文件而不是文件夹 String[] arr = file.getName().split("\\."); //split方法分隔文件名,注意正则表达式,“.”要用转义字符 if(arr.length >= 2){ //判断文件返回的数组元素个数,小于2则说明无后缀名,不统计这种文件 String endName = arr[arr.length - 1]; //endName是文件后缀名 if(hm.containsKey(endName)){ //判断hashmap中是否有当前后缀名,如果有就把数目+1 Integer count = hm.get(endName); count++; hm.put(endName, count); }else { hm.put(endName, 1); //新的后缀名就调用put方法加入hashmap } } }else { //运行到这里表示当前file是文件夹 HashMap<String, Integer> sonMap = getCount(file); //递归调用本方法进入到子文件夹 Set<Map.Entry<String, Integer>> entries = sonMap.entrySet(); //调用entrySet()方法把hashmap中的键值对元素存到新的集合中以后续遍历 for (Map.Entry<String, Integer> entry : entries) { String key = entry.getKey(); Integer value = entry.getValue(); if(hm.containsKey(key)){ //判断hm中是否有子文件夹下的key,也就是是否含有子文件夹文件的后缀名 hm.put(key,value + hm.get(key)); //hm中含有此后缀名,直接将value更新 }else { hm.put(key,value); } } } } return hm; //返回hashmap } }
此案例综合了很多方面的知识,包括正则表达式的运用,File的方法调用,增强for的调用,split方法的灵活运用,hashmap的方法,适合作为日常练习使用。