引
工作中遇到图片、音视频、文档等文件管理业务或数据流量统计业务时,文件大小或数据流量大小属性常以byte 数据为存储单位,存储和排序等都好操作。然而在前端展示给用户时,该数据却并不友好,因此,需要将文件大小适当转换,以便用户阅读。
以下代码以 1024 为进制,封装了一个工具类 FileSizeUtil
。
代码
FileSizeUtil
代码如下:
import java.text.DecimalFormat;
import java.util.Objects;
/**
* 文件大小工具类
* <div>数据存储转换,最大支持到G</div>
* @author xzbd
*
*/
public class FileSizeUtil {
public static final Integer K_SIZE = 1024;
public static final Integer M_SIZE = 1048576;
public static final Integer G_SIZE = 1073741824;
public static final String B = "B";
public static final String K = "K";
public static final String M = "M";
public static final String G = "G";
/**
* 将字节数据转为带单位的字符串
*
* @param fileSize 文件字节大小
* @return
*/
public static String formatFileSize(Long fileSize) {
String fileSizeStr = "";
if (Objects.isNull(fileSize)) {
return fileSizeStr;
}
if (fileSize == 0L) {
return "0".concat(B);
}
DecimalFormat df = new DecimalFormat("#.00");
if (fileSize < K_SIZE) {
fileSizeStr = df.format((double) fileSize) + B;
} else if (fileSize < M_SIZE) {
fileSizeStr = df.format((double) fileSize / K_SIZE) + K;
} else if (fileSize < G_SIZE) {
fileSizeStr = df.format((double) fileSize / M_SIZE) + M;
} else {
fileSizeStr = df.format((double) fileSize / G_SIZE) + G;
}
return fileSizeStr;
}
}
注:
有些场景中 数据大小的单位进率并不以 1024 计算,而是使用 1000 来计算,此种情况,请修改 K_SIZE 、 M_SIZE 、G_SIZE 的值即可。