递归计算文件夹下所有文件的总大小
需求
需求描述:从键盘接收一个文件夹路径,获得该文件夹大小并输出到控制台。
代码实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
import java.io.File;
import java.util.Scanner;
public class Demo934 {
public static void main(String[] args) {
//创建扫描器
Scanner sc = new Scanner(System.in);
System.out.println("请输入您要查询的文件夹的绝对路径(格式为: 盘符:\\文件夹名\\子文件夹名...)");
//定义变量保存用户输入的文件夹路径
String path = sc.next();
//调用方法
long fileSize = getFileSize(path);
System.out.println("您查询的"+path+"文件夹下的文件大小为"+(fileSize/1024/1024)+"MB");
}
//创建方法获取指定文件夹下的文件大小并将其打印出来,参数为文件夹绝对路径,返回值文件的大小
public static long getFileSize(String file) {
//创建文件对象
File f = new File(file);
if (f.exists() && f.isDirectory()) {//文件夹存在
//获取文件夹的文件的集合
File[] files = f.listFiles();
long count =0;//用来保存文件的长度
for (File file1 : files) {//遍历文件集合
if (file1.isFile()) {//如果是文件
count += file1.length();//计算文件的长度
} else {
count += getFileSize(file1.toString());//递归调用
}
}
return count;
}else {
System.out.println("您查询的文件夹有误");
return 0;
}
}
}
|
控制台运行效果
递归删除文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
/**
* @author yzh
* @date 2018年4月26日 14:52:12
* @description 递归删除文件夹下所有目录和文件
*/
public static void delDir(File f) {
if(f.isDirectory()) {// 判断是否是一个目录, 不是的话跳过, 直接删除; 如果是一个目录, 先将其内容清空.
File[] subFiles = f.listFiles();// 获取子文件/目录
for (File subFile : subFiles) {// 遍历该目录
// 递归调用删除该文件: 如果这是一个空目录或文件, 一次递归就可删除. 如果这是一个非空目录, 多次
// 递归清空其内容后再删除
delDir(subFile);
}
}
f.delete();// 删除空目录或文件
}
|