题目:
键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数,注意:用文件类型(后缀名,不包含.(点),如:"java","txt")作为key,用个数作为value,放入到map集合中,并用两种方式遍历map集合
例如:
doc 的类型的文件有 3 个
java 的类型的文件有 5 个
txt 的类型的文件有 7 个
import java.io.File;
import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;
public class ExsFileCount {
public static void main(String[] args) {
// 对地址进行了转换,用户直接粘贴windows中的路径即可
System.out.println("请输入windows中路径");
String in = new Scanner(System.in).next();
File file = new File(trans(in)); // file为目标路径
HashMap<String, Integer> map = new HashMap();
fileCount(map, file);
showMap(map);
}
// 本方法用于统计指定路径下的文件个数,并将结果传入map
private static void fileCount(HashMap<String, Integer> map, File file) {
File[] fArr = file.listFiles();
for (File f : fArr) {
if (f.isDirectory()) {
fileCount(map, f);
} else {
String name = f.getName().toLowerCase();
// 先对无格式的文件进行计数(文件名中无点)
if (name.indexOf('.') == -1) {
if (!map.containsKey("Others")) {
map.put("Others", 1);
} else {
int oc = map.get("Others") + 1;
map.put("Others", oc);
}
}
// 对有格式的文件进行计数
int index = name.lastIndexOf(".");
String type = name.substring(index + 1);
if (!map.containsKey(type)) {
map.put(type, 1);
} else {
int c = map.get(type) + 1;
map.put(type, c);
}
}
}
}
// 本方法用于遍历map
private static void showMap(HashMap<String, Integer> map) {
Set<String> keyset = map.keySet();
for (String key : keyset) {
System.out.println(key + " 的类型的文件有 " + map.get(key) + "个");
}
}
// 本方法用于将windows格式路径转换为java认可的路径格式
private static String trans(String in) {
StringBuffer sbIn = new StringBuffer();
char[] cArr = in.toCharArray();
for (char c : cArr) {
sbIn.append(c);
if ('\\' == c)
sbIn.append("\\");
}
return sbIn.toString();
}
}