最近公司要做对象存储平台,从MINIO拿到的文件大小都是long类型的byte,于是,需要如下工具类
package cn.xdf.xadd.utils;
import java.math.BigDecimal;
/**
* 计算文件大小工具类
*
* @author zhurunhua
* @since 2020-11-03 17:04
*/
public enum FileSizeUtil {
/**
* 单例
*/
SINGLETON;
private static final String BYTE = "字节";
private static final String KB = "KB";
private static final String MB = "MB";
private static final String GB = "GB";
private static final long KB_SIZE = 1024;
private static final long MB_SIZE = 1048576;
private static final long GB_SIZE = 1073741824;
/**
* 获取文件大小
*
* @param size 字节长度
* @return java.lang.String
* @date 1/22/21 6:33 PM
*/
public String getHumanSize(long size) {
String humanSize;
//字节
if (size < KB_SIZE) {
humanSize = size + BYTE;
return humanSize;
}
//KB
else if (size < MB_SIZE) {
humanSize = getQuotient(size, KB_SIZE, 2) + KB;
return humanSize;
}
//MB
else if (size < GB_SIZE) {
humanSize = getQuotient(size, MB_SIZE, 2) + MB;
return humanSize;
}
//GB
else {
humanSize = getQuotient(size, GB_SIZE, 2) + GB;
}
return humanSize;
}
/**
* 获取两数之商,四舍五入,保留指定小数位
*
* @param dividend 被除数
* @param divisor 除数
* @param scale 保留小数位
* @return java.lang.Double
* @date 1/22/21 7:44 PM
*/
public Double getQuotient(long dividend, long divisor, int scale) {
return BigDecimal.valueOf((double) dividend / divisor).setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
}
不知道是否有更优写法,先凑活用吧
使用方法:
public static void main(String[] args) {
String humanSize = FileSizeUtil.SINGLETON.getHumanSize(12345678L);
System.out.println(humanSize);
}
输出:
OVER.