【工具类】计算机字节数转换为人类可读的大小

最近公司要做对象存储平台,从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);
    }

输出:

【工具类】计算机字节数转换为人类可读的大小_第1张图片

OVER.

 

 

你可能感兴趣的:(Java,java)