参考文章:
一、键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数 http://blog.csdn.net/qq_36698213/article/details/78711420
二、Java学习之IO流一 http://www.dongcoder.com/detail-604731.html
三、键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数
http://blog.csdn.net/wangzili1995/article/details/77103401
上面是参考文章,下面写我自己的代码了:
想说主程序:
public static void main(String[] args) {
File dir = new File("D:\\abc");
Map<String, Integer> map = new HashMap<String, Integer>();
countFileClassNumber(dir, map);
entrySetPrint(map);
System.out.println("=================================");
keySetPrint(map);
}
接下来是两个函数:
/*
* 设计函数,统计文件加中各种文件的个数
* 基本解决思路:
* 1,遍历文件夹,对文件夹中所有的文件类型,取“ . ” 后面的几位字母
* 2,用一个数组来存储文件夹中这些文件类型的个数
* 3,将文件类型还有对应的类型个数,存储到Map集合中
* 4,两种方式遍历集合 keySet方法, entrySet方法
*/
public static void countFileClassNumber(File dir,
Map<String, Integer> map) {
File[] fileArr = dir.listFiles();
//递归遍历每一个文件,截取后缀并存入相应的数组中
for (int i = 0; i < fileArr.length; i++) {
if (fileArr[i].isDirectory()) {
countFileClassNumber(fileArr[i], map);
} else {
String str = fileArr[i].toString();
str = str.substring(str.lastIndexOf(".") + 1);//截取文件夹后缀 “.”之后的字符串
map.put(str, map.containsKey(str) ? map.get(str) + 1 : 1);//精简写法,不过不推荐,建议使用if...else
}
}
}
HashMap遍历输出方法:
/*
* Map的entrySet输出方法
*/
public static void entrySetPrint(Map<String, Integer> map) {
for (Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + "..." + entry.getValue());
}
}
/*
* Map的keySet 输出方法
*/
public static void keySetPrint(Map<String, Integer> map) {
for (String key : map.keySet()) {
System.out.println(key + "..." + map.get(key));
}
}
OK,上面就是我参考其他文章写出来的代码了。