键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数,注意:用文件类型(后缀名,不包含.(点),如:“java”,“txt”)作为key,
用个数作为value,放入到map集合中,并用两种方式遍历map集合
例如:
doc 的类型的文件有 3 个
java 的类型的文件有 5 个
txt 的类型的文件有 7 个
实现代码:
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
public class HomeWork2 {
public static void main(String[] args) {
System.out.print("请输入文件夹路径:");
// 测试路径:D:\360MoveData\Users\xucc\Desktop\aaa
File file = new File(new Scanner(System.in).next());
HashFile(file);
}
public static void HashFile(File file) {
File[] fileArr = file.listFiles();
List<String> list = new ArrayList<String>();//新建一个数组,用来存储所有文件的后缀名
for (File f : fileArr) {
if (!f.isDirectory()) {
int index = f.toString().indexOf(".");//获取文件名中“.”的下标
String fileName = f.toString().substring(index + 1);// 截取文件后缀名
list.add(fileName);
} else {
File[] file2 = f.listFiles();
for (File f2 : file2) {
int index = f2.toString().indexOf(".");
String fileName = f2.toString().substring(index + 1);// 截取文件后缀名
list.add(fileName);
}
}
}
HashMap<String, Integer> hm = new HashMap<>();
int value = 1;
for (String f : list) {
if (!hm.containsKey(f))
hm.put(f, 1);
else
hm.put(f, ++value);
}
for(String key : hm.keySet())
System.out.println(key +"的类型的文件有"+hm.get(key));
System.out.println("________________");
for (Map.Entry<String, Integer> me : hm.entrySet()) {
String key = me.getKey();
int numValue = me.getValue();
System.out.println(key + "的类型的文件有" + numValue);
}
}
}
输出结果: