键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中,每种类型的文件及个数,
注意:用文件类型(后缀名,不包含.,"java","txt")作为key,用个数作为value,放入到map集合中,并按照如下格式打印map集合中的内容
docx类型的文件有 1 个
java类型的文件有 24 个
txt类型的文件有 10 个
方法一:
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
File file = new File("D:\\ddd");
getCount(file, map);
System.out.println(map);
}
/*
* 统计以ext为拓展名的文件在file中出现的次数
*/
public static void getCount(File file,Map<String, Integer> map) {
File[] files = file.listFiles();
for (File f : files) {
if(f.isFile()) {
// 获取拓展名
String name = f.getName();
int index = name.lastIndexOf('.');
String ext = name.substring(index+1);
//ext 出现了一次
if(map.containsKey(ext)) {
map.put(ext, map.get(ext)+1);
}else {
map.put(ext, 1);
}
}else if(f.isDirectory()) {
getCount(f, map);
}
}
}
方法二
public static Map<String,Integer> map;
public static Integer txtNum;
public static Integer javaNum;
public static Integer docNum;
public static void main(String[] args) {
function();
getPath();
printMap();
}
public static void function() {
map=new HashMap<String, Integer>();
txtNum=0;
javaNum=0;
docNum=0;
map.put("java", javaNum);
map.put("doc", docNum);
map.put("txt", txtNum);
}
public static void getPath() {
Scanner scan=new Scanner(System.in);
while(true) {
System.out.println("请输入文件路径:");
String path=scan.nextLine();
File file=new File(path);
if(! file.exists()) {
System.out.println("文件夹不存在!");
continue;
}else {
saveMap(file);
System.out.println("存储完成!");
break;
}
}
}
/*
* 判断文件类型
*/
public static void saveMap(File file) {
File[] fileArr=file.listFiles();
for(int i=0;i<fileArr.length;i++) {
if(fileArr[i].isDirectory()) {
saveMap(fileArr[i]);
}
if(fileArr[i].getAbsolutePath().endsWith("txt")) {
txtNum+=1;
map.put("txt", txtNum);
}
if(fileArr[i].getAbsolutePath().endsWith("java")) {
javaNum+=1;
map.put("java", javaNum);
}
if(fileArr[i].getAbsolutePath().endsWith("doc")) {
docNum+=1;
map.put("doc", docNum);
}
}
}
/*
* 输出文件个数
*/
public static void printMap() {
Set<String> set=map.keySet();
Iterator<String> it=set.iterator();
while(it.hasNext()) {
String s=it.next();
System.out.println(s+"类型的文件个数有:"+map.get(s));
}
}