现在StringUtils-Comment支持此功能,请参考

缺陷分析,不支持文件小数点后面的信息。比如 123.3KB

        String zero = FileUtils.byteCountToDisplaySize(0);
        String oneByte = FileUtils.byteCountToDisplaySize(1);
        String oneKB = FileUtils.byteCountToDisplaySize(1024);
        String oneMB = FileUtils.byteCountToDisplaySize(1024 * 1024);
        String oneGB = FileUtils.byteCountToDisplaySize(1024 * 1024 * 1024);
        String oneTB = FileUtils.byteCountToDisplaySize(1024 * 1024 * 1024 * 1024L); // 注意超过GB必须传入Long类型
        String onePB = FileUtils.byteCountToDisplaySize(1024 * 1024 * 1024 * 1024L * 1024); // 注意超过GB必须传入Long类型
        String oneEB = FileUtils.byteCountToDisplaySize(1024 * 1024 * 1024 * 1024L * 1024 * 1024); // 注意超过GB必须传入Long类型
        String max = FileUtils.byteCountToDisplaySize(Long.MAX_VALUE); // 注意超过GB必须传入Long类型
0 bytes
1 bytes
1 KB
1 MB
1 GB
1 TB
1 PB
1 EB
7 EB // 注意最大不支持大于8388607.9T的数据

如果能接受文件大小忽略小数点后面内容,优先使用上文commons-lang3 下的byteCountToDisplaySize 否则请使用我编写的工具类!

我个人编写的工具类

/**
 * @author : zanglikun
 * @date : 2021/10/28 20:36
 * @Version: 1.0
 * @Desc : 读取文件大小 转成K、KB、MB、GB、TB(不支持大于8388607.9T的数据)
 */
public class FileSizeOut {
    public static String printFileSize(long size) {
        long yiLingErSi = 1024; // 定义文件大小是1024Byte = 1Kb
        if (size < 0){
            return "小伙子,传入负数,拒绝使用";
        }
        //B 单位 文件小于yilingersiB直接返回结果
        if (size < yiLingErSi) {
            return size + "B";
        } else {
            // 文件大于1024 B 单位就得以1KB为单位了,所以除以yilingersi
            size = size / yiLingErSi;
        }
        // 判断文件是否大于yilingersiKB
        if (size < yiLingErSi) {
            return size + "KB";
        } else {
            //文件大约yilingersiKB,单位以MB作为单位,所以除以yilingersi。
            size = size / yiLingErSi;
        }
        // 判断文件是是否大约yilingersiMB,如果在yilingersiMB的范围内,先乘以100,然后运算的时候在除以100 目的是得出精确的小数点后面的数字
        // 比如 768.10MB 整数位很简单得到768 但是 小数部分得不到了所以 先乘以100 得到76810 再取模(%)100 得到10 即为小数部分
        // 以此类推:想得到3位小数,那就乘以1000 再取模 %1000 就可以得到3位部分的内容了
        if (size < yiLingErSi) {
            size = size * 100;
            return (size / 100) + "."
                    + (size % 100) + "MB";
        } else if (size < yiLingErSi * yiLingErSi) {
            //如果要以GB为单位的,先除于yilingersi 再作同样的处理
            size = size * 100 / yiLingErSi;
            return (size / 100) + "."
                    + (size % 100) + "GB";
        } else {
            //如果要以TB为单位的,除于yilingersi后再除以yilingersi 再作同样的处理
            size = size * 100 / yiLingErSi / yiLingErSi;
            return (size / 100) + "."
                    + (size % 100) + "TB";
        }
    }
    public static void main(String[] args) {
        System.out.println(printFileSize(-1L));
        System.out.println(printFileSize(2L * 1024));
        System.out.println(printFileSize(3L * 1024 * 1024));
        System.out.println(printFileSize(4L * 1024 * 1024 * 1024));
        System.out.println(printFileSize(5L * 1024 * 1024 * 1024 * 1024));
        System.out.println(printFileSize(Long.MAX_VALUE));
    }
}

输出的结果是:

小伙子,传入负数,拒绝使用
2KB
3.0MB
4.0GB
5.0TB
8388607.99TB
特殊说明:
上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取全部资料 ❤