工具类:1.递归实现返回目录或者文件大小 2.递归实现查找某一目录下大于size的文件
起因: 因为自己的c盘没怎么用就快满了,就想看下到底是什么文件导致我的c盘满的这么快,所以自己用java手动写了两个工具类,代码如下:
- 返回目录或者文件的大小
/**
* 返回目录或者文件的大小
*
* @param file
* @return
*/
public static Long countFileOrDirectorySize(File file) throws FileNotFoundException {
if (!file.exists()) {
throw new FileNotFoundException();
}
Long length = 0L;
if (file.isDirectory()) {
File[] files = file.listFiles();
if (files ==null) {
return 0L;
}
for (File file1 : files) {
Long sizeOver1G = countFileOrDirectorySize(file1);
length = length + sizeOver1G;
}
return length;
}
return file.length();
}
用法:传入File即可
public static void main(String[] args) {
File file = new File("E:\\GITHUB");
try {
System.out.println(FileUtils.countFileOrDirectorySize(file));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
结果验证:
- 查找file目录下大于size的文件
/**
* 找到某个目录下,大于size的文件
*
* @param file file
* @param size 单位:GB
*/
public static Map<String, Double> findOverSizeFile(File file, Double size) {
Map<String, Double> pathSizeMap = new HashMap<>();
if (file.isDirectory()) {
File[] files = file.listFiles();
if (files == null) {
return null;
}
for (File file1 : files) {
Map<String, Double> stringDoubleMap = findOverSizeFile(file1, size);
if (stringDoubleMap != null) {
pathSizeMap.putAll(stringDoubleMap);
}
}
}
Double length = file.length() / 1024.0 / 1024.0 / 1024.0;
if (length > size) {
pathSizeMap.put(file.getPath(), length);
}
return pathSizeMap;
}
结果验证:
至此,所有大于0.5g的文件已经查出来了。