现在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博客搜索:标题关键字。以获取最新全部资料 ❤
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取最新全部资料 ❤