焉知愚之乐
saojipo.com

递归遍历文件夹取每个类型数量及父文件夹大小

import java.io.File;

import java.text.DecimalFormat;

import java.util.HashMap;

import java.util.Iterator;

import java.util.Set;



/*

 * 递归遍历文件夹取每个类型数量及父文件夹大小

 */

public class NewWorks {

// 创建静态fileMap集合,因为存在递归遍历,Map集合放在局部变量内会导致前Map集合被覆盖

static HashMap<String, Integer> fileMap = new HashMap<String, Integer>();

// 定义静态long类型成员变量,用于递归储存文件尺寸

static long fileSize;



public static void main(String[] args) {

// 调用addFileMap,提供file类对象做参数

File file = new File("d:\\e源码");

addFileMap(file);

// 遍历fileMap开始

Set<String> fileName = fileMap.keySet();

Iterator<String> fileIt = fileName.iterator();

while (fileIt.hasNext()) {

String fileKey = fileIt.next();

Integer fileValue = fileMap.get(fileKey);

System.out.println("数量:" + fileValue + "\t\t类型:" + fileKey);

}

System.out.println(file.getName() + "\t占用空间:"+formatFileSize(fileSize));

// 遍历fileMap结束

}



// 添加addFileMap方法,用于递归遍历目录并计算文件尺寸

public static void addFileMap(File dir) {

// 调用file类方法listFiles遍历参数目录,返回file数组

File fileArr[] = dir.listFiles();

// foreach循环遍历开始

for (File f : fileArr) {

// 如果是文件夹,则进行方法递归遍历

if (f.isDirectory()) {

// 判断fileMap集合中是否包含字符串"文件夹"的键

if (fileMap.containsKey("文件夹"))

// 如果true,修改fileMap<"文件夹",原值>的值为原值+1

fileMap.put("文件夹", fileMap.get("文件夹") + 1);

else {

// 否则添加初始化数据值为1

fileMap.put("文件夹", 1);

}

// 方法递归

addFileMap(f);

} else{

// 否则调用方法addCount为fileMap添加数据

addCount(f.toString());

// 计数器计算文件尺寸

fileSize+=f.length();

}

}

// foreach循环结束

}



// 添加addCount方法,用于添加fileMap数据

public static void addCount(String name) {

// 定义String类型suffix成员变量,值为文件后缀名

String suffix = name.substring(name.lastIndexOf(".") + 1);

// 判断fileMap集合中是否包含字符串 suffix 的键

if (fileMap.containsKey(suffix))

// 如果true,修改fileMap<suffix,原值>的值为原值+1

fileMap.put(suffix, fileMap.get(suffix) + 1);

else

// 否则添加初始化数据值为1

fileMap.put(suffix, 1);

}



// 添加formetFileSize方法,用于转换文件尺寸单位(来自网络)

public static String formatFileSize(long fileS) {

DecimalFormat df = new DecimalFormat("#.00");

String fileSizeString = "";

if (fileS < 1024) {

fileSizeString = df.format((double) fileS) + "B";

} else if (fileS < 1048576) {

fileSizeString = df.format((double) fileS / 1024) + "K";

} else if (fileS < 1073741824) {

fileSizeString = df.format((double) fileS / 1048576) + "M";

} else {

fileSizeString = df.format((double) fileS / 1073741824) + "G";

}

return fileSizeString;

}

}
赞(0)

评论 抢沙发

评论前必须登录!