您的位置:首页 > 其它

统计文件夹(包含子文件夹)中每种类型的文件及个数

2017-09-05 20:10 323 查看
package com.lxq;

import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

/*
*分析以下需求,并用代码实现
键盘录入一个文件夹路径,统计该文件夹(包含子文件夹)中,每种类型的文件及个数,
//获取该路径下所有文件(包含子文件夹)

注意:用文件类型(后缀名,不包含.,"java","txt")作为key,用个数作为value,放入到map集合中,并按照如下格式打印map集合中的内容

docx类型的文件有  1 个
java类型的文件有  24 个
txt类型的文件有  10 个
//...
*/

public class Demo1 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
//提示:
System.out.println("请输入一个你想查询的路径:");
String path = sc.nextLine();
//File的构造方法. 根据传入的String路径转换成为File类型的对象
File file = new File(path);
//创建集合对象
HashMap<String, Integer> map = new HashMap<String, Integer>();
//获取了所有文件夹下的后缀名和出现次数 map中就有了数据
getFileName(file, map);
//遍历map集合
Set<Map.Entry<String, Integer>> entrys = map.entrySet();
//得到键值对对象的集合 遍历set集合得到每一个键值对对象
for (Map.Entry<String, Integer> entry : entrys) {
//获得了每一个键值对对象后 可以获取单个键值对的具体值
String fileHouZui = entry.getKey();
Integer num = entry.getValue();
//输出结果 docx类型的文件有  1 个
System.out.println(fileHouZui + "类型的文件有"+num+"个");
}

}

public static void getFileName(File file,HashMap<String, Integer> map){
//获取所有文件
//判断文件是否是一个文件夹
if (file.isDirectory()) {
//获取文件夹的文件数组
File[] files = file.listFiles();
//遍历文件数组
for (File f : files) {
//f是一个文件
if (f.isFile()) {
//获取这个文件的文件名
String filename = f.getName();
//切割文件名
String[] split = filename.split("\\.");
//获取后缀名
String houZui = split[split.length - 1];
//添加到集合中去
//做判断集合中是否出现过同名后缀
if (map.get(houZui) == null) {
//添加新的后缀
map.put(houZui, 1);
} else {
//若出现过的后缀先获取他出现的次数再让他的次数+1
Integer integer = map.get(houZui);
integer++;
//从新添加
map.put(houZui, integer);
}
} else {//f是一个文件夹
//递归 有一个获取文件夹所有文件的方法 并获取他的后缀名
getFileName(f,map);
}
}
} else {
//获取文件名
String filename = file.getName();
//以.来切割文件名 获得文件的后缀(文件的类型) Demo.java  [Demo,java]
String[] split = filename.split("\\.");
String houZui = split[split.length - 1];
//判断map集合中是否有重复的后缀
if (map.get(houZui) == null) {
//若没有重复的key 说明这是第一次出现的后缀名 把这个后缀名添加到map集合中去 并给他的值赋值为1
map.put(houZui, 1);
} else {
//根据map集合的键(文件的后缀名)找值(后缀名出现的次数)
Integer integer = map.get(houZui);
//找到值(文件后缀名出现的次数) 自增一次
integer++;
//把新的次数重新添加到集合中去
map.put(houZui, integer);
}
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  IO流
相关文章推荐