问题描述:
键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中每种类型的文件及个数
注意:用文件类型(后缀名,不包含.(点),如:"java","txt")作为key,
用个数作为value,放入到map集合中,并用两种方式遍历map集合
例如:
doc 的类型的文件有 3 个
java 的类型的文件有 5 个
txt 的类型的文件有 7 个
自己的代码(参考答案): [文件素材全是本地E盘的abc文件夹]
import java.io.File;
import java.util.HashMap;
public class Test08 {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
getFileType(new File("E:/abc"),map);
map.forEach((K,V)->{
System.out.println(K+":"+V);
});
}
private static void getFileType(File dir, HashMap<String, Integer> map) {
if(dir.isDirectory()){
//如果是文件夹
File[] files = dir.listFiles();
for (File file : files) {
getFileType(file,map);
}
} else {
//获得文件名
String fileName = dir.getName().toLowerCase();
String[] split = fileName.split("\\.");
String key = split[1];
//判断map是否有该key存在
if(map.containsKey(key)){
//存在
map.put(key,map.get(key)+1);
}else {
//不存在
map.put(key,1);
}
}
}
}
/*
打印结果:
txt:4
pdf:4
java:5
avi:1
*/
答案代码:
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Test03_03 {
public static void main(String[] args) {
File dir = inputFile();
// 创建map集合
Map<String,Integer> map = new HashMap<String, Integer>();
getFileType(dir,map);
// 遍历map
for(Map.Entry<String,Integer> entry:map.entrySet()) {
System.out.println(entry.getKey() + " 类型的文件有 " + entry.getValue() + " 个 ");
}
}
public static void getFileType(File f,Map<String,Integer> map) {
if(f.isDirectory()) {
File files[] = f.listFiles();
for (File file : files) {
getFileType(file,map);
}
} else {
// 获得文件名
String fileName = f.getName(); // aaa.txt
// 获得文件扩展名
String key = fileName.substring(fileName.lastIndexOf(".") + 1); // txt
// 判断map是否包含key
if(map.containsKey(key)){
map.put(key, map.get(key) + 1); // txt 2
} else {
map.put(key, 1); // txt 1
}
}
}
/*
* 根据用户输入的路径字符串创建文件对象
*/
private static File inputFile() {
// 创建键盘输入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个文件夹路径:");
// 接收用户输入的路径
String filePath = sc.nextLine();
// 根据路径字符串创建文件对象
File dir = new File(filePath);
if(!dir.exists()) throw new RuntimeException("你输入的文件路径不存在!!!");
// 判断是否是文件夹
if(!dir.isDirectory()){
throw new RuntimeException("输入的路径不是文件夹路径!!!");
}
return dir;
}
}
原文:https://www.cnblogs.com/liqiliang1437/p/13121782.html