package com.ksource.common.util;
import java.io.File;
import java.math.BigDecimal;
/**
* @Author dxy
* @Date 2022/7/21 10:13
* @Description
*/
public class FileSizeUtil {
public static String getPrintSize(long size) {
double sizeDou = (double) size;
//如果字节数少于1024,则直接以B为单位,否则先除于1024,后3位因太少无意义
if (size < 1024) {
return String.valueOf(size) + "B";
} else {
sizeDou = size / 1024d;
BigDecimal bigDecimal = new BigDecimal(sizeDou);
sizeDou = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
}
//如果原字节数除于1024之后,少于1024,则可以直接以KB作为单位
//因为还没有到达要使用另一个单位的时候
//接下去以此类推
if (sizeDou < 1024d) {
return String.valueOf(sizeDou) + "KB";
} else {
sizeDou = sizeDou / 1024d;
BigDecimal bigDecimal = new BigDecimal(sizeDou);
sizeDou = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
}
if (sizeDou < 1024d) {
//因为如果以MB为单位的话,要保留最后1位小数,
//因此,把此数乘以100之后再取余
return String.valueOf(sizeDou) + "MB";
} else {
//否则如果要以GB为单位的,先除于1024再作同样的处理
sizeDou = sizeDou / 1024d;
BigDecimal bigDecimal = new BigDecimal(sizeDou);
sizeDou = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
return String.valueOf(sizeDou) + "GB";
}
}
//创建方法获取指定文件夹下的文件大小并将其打印出来,参数为文件夹绝对路径,返回值文件的大小
public static long getFileSize(File file){
//创建文件对象
if (file.exists() && file.isDirectory()){//文件夹存在
// 获取文件夹的文件的集合
File[] files = file.listFiles();
long count = 0; //用来保存文件的长度
for (File f : files){ //遍历文件集合
if (f.isFile()){ //如果是文件
count += f.length();//计算文件的长度
} else {
count += getFileSize(f);//递归调用
}
}
return count;
}else {
System.out.println("您查询的文件夹有误");
return 0;
}
}
}