IO流读取文件夹大小

IO流读取文件夹大小的源码

package cn.tedu.file; import java.io.File; import
java.math.BigDecimal; import java.util.Scanner; //递归求目录总大小的测试 public
class Test2_Size { @SuppressWarnings(“resource”) public static void
main(String[] args) { // 1,接收用户输入的目录 System.out.print(“目录:”);
String path = new Scanner(System.in).nextLine(); File dir = new
File(path); // System.out.printl## 标题n(“大小:” + size(dir));
//为了防止浮点数精确度丢失,我们就要用到BigDecimal工具包 BigDecimal bigDecimal1 = new BigDecimal(size(dir) + “”); BigDecimal bigDecimal2 = new
BigDecimal(1073741824 + “”); BigDecimal bigDecimal3 =
bigDecimal1.divide(bigDecimal2, 3, BigDecimal.ROUND_HALF_UP);
System.out.println(“大小:” + bigDecimal3 + “G”);
System.out.println(“文件个数:” + countFileSize(dir));
System.out.println(“文件夹个数:” + countFolderSize(dir)); }

private static long countFolderSize(File dir) {
int size = 0;
// 获得目录中的所有内容
File[] files = dir.listFiles();
// 遍历
for (File f : files) {
if (f.isDirectory()) {
// 文件夹则加一
size++;
// 进入该目录,统计目录中文件夹的数量
// 注意不能只写countFileSize(f),这样每层都有一个新的size
size += countFolderSize(f);
}
}
return size;
}

// 创建size() ,求大小
private static long size(File dir) {
// 1,列出文件夹下面的所有资源
File[] fs = dir.listFiles();
// 1.1,我们需要获取每个File对象,就需要遍历fs数组
long count = 0;// 定义变量,记录总和
for (int i = 0; i < fs.length; i++) {
File file = fs[i]; // 表示当前遍历得到的资源
// --2,判断如果资源是文件,把文件的字节量求和length()
if (file.isFile()) {// 是文件
count = count + file.length();// 求和?
} else if (file.isDirectory()) {// 是文件夹
// --3,判断如果资源是文件夹,继续列表,继续判断,如果是文件求和如果是文件夹继续列表继续判断…开始重复的干
count = count + size(file);// 递归??因为干的活儿和size()一样了…
}
}
return count;
}
}

发布了36 篇原创文章 · 获赞 13 · 访问量 1087

猜你喜欢

转载自blog.csdn.net/weixin_44598691/article/details/104658173