DataSizeUtil 新增format方法(issue#IB6UUX@Gitee)

This commit is contained in:
Looly 2024-11-25 19:31:24 +08:00
parent 50807c84d6
commit e6c6baabd2
4 changed files with 47 additions and 4 deletions

View File

@ -2,7 +2,7 @@
# 🚀Changelog # 🚀Changelog
------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------
# 5.8.34(2024-11-24) # 5.8.34(2024-11-25)
### 🐣新特性 ### 🐣新特性
* 【http 】 增加Windows微信浏览器识别issue#IB3SJF@Gitee * 【http 】 增加Windows微信浏览器识别issue#IB3SJF@Gitee
@ -10,6 +10,7 @@
* 【core 】 Calculator兼容`x`字符作为乘号issue#3787@Github * 【core 】 Calculator兼容`x`字符作为乘号issue#3787@Github
* 【poi 】 Excel07SaxReader中对于小数类型增加精度判断issue#IB0EJ9@Gitee * 【poi 】 Excel07SaxReader中对于小数类型增加精度判断issue#IB0EJ9@Gitee
* 【extra 】 SpringUtil增加getBean重载issue#3779@Github * 【extra 】 SpringUtil增加getBean重载issue#3779@Github
* 【core 】 DataSizeUtil 新增format方法issue#IB6UUX@Gitee
### 🐞Bug修复 ### 🐞Bug修复
* 【core 】 修复DateUtil.rangeToList中step小于等于0时无限循环问题issue#3783@Github * 【core 】 修复DateUtil.rangeToList中step小于等于0时无限循环问题issue#3783@Github

View File

@ -1,5 +1,7 @@
package cn.hutool.core.io.unit; package cn.hutool.core.io.unit;
import cn.hutool.core.util.ArrayUtil;
import java.text.DecimalFormat; import java.text.DecimalFormat;
/** /**
@ -35,4 +37,20 @@ public class DataSizeUtil {
return new DecimalFormat("#,##0.##") return new DecimalFormat("#,##0.##")
.format(size / Math.pow(1024, digitGroups)) + " " + DataUnit.UNIT_NAMES[digitGroups]; .format(size / Math.pow(1024, digitGroups)) + " " + DataUnit.UNIT_NAMES[digitGroups];
} }
/**
* 根据单位将文件大小转换为对应单位的大小
*
* @param size 文件大小
* @param fileDataUnit 单位
* @return 大小
* @since 5.8.34
*/
public static String format(Long size, DataUnit fileDataUnit){
if (size <= 0) {
return "0";
}
int digitGroups = ArrayUtil.indexOf(DataUnit.UNIT_NAMES,fileDataUnit.getSuffix());
return new DecimalFormat("##0.##").format(size / Math.pow(1024, digitGroups)) + " " + DataUnit.UNIT_NAMES[digitGroups];
}
} }

View File

@ -44,10 +44,12 @@ public enum DataUnit {
*/ */
TERABYTES("TB", DataSize.ofTerabytes(1)); TERABYTES("TB", DataSize.ofTerabytes(1));
/**
* 单位后缀
*/
public static final String[] UNIT_NAMES = new String[]{"B", "KB", "MB", "GB", "TB", "PB", "EB"}; public static final String[] UNIT_NAMES = new String[]{"B", "KB", "MB", "GB", "TB", "PB", "EB"};
private final String suffix; private final String suffix;
private final DataSize size; private final DataSize size;
@ -56,6 +58,16 @@ public enum DataUnit {
this.size = size; this.size = size;
} }
/**
* 单位后缀
*
* @return 单位后缀
* @since 5.8.34
*/
public String getSuffix() {
return this.suffix;
}
DataSize size() { DataSize size() {
return this.size; return this.size;
} }
@ -76,5 +88,4 @@ public enum DataUnit {
} }
throw new IllegalArgumentException("Unknown data unit suffix '" + suffix + "'"); throw new IllegalArgumentException("Unknown data unit suffix '" + suffix + "'");
} }
} }

View File

@ -1,8 +1,9 @@
package cn.hutool.core.io.unit; package cn.hutool.core.io.unit;
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class DataSizeUtilTest { public class DataSizeUtilTest {
@Test @Test
@ -61,6 +62,18 @@ public class DataSizeUtilTest {
assertEquals("1 TB", format); assertEquals("1 TB", format);
} }
@Test
public void formatWithUnitTest(){
String format = DataSizeUtil.format(Long.MAX_VALUE, DataUnit.TERABYTES);
assertEquals("8388608 TB", format);
format = DataSizeUtil.format(1024L * 1024 * 1024 * 1024 * 1024, DataUnit.GIGABYTES);
assertEquals("1048576 GB", format);
format = DataSizeUtil.format(1024L * 1024 * 1024 * 1024, DataUnit.GIGABYTES);
assertEquals("1024 GB", format);
}
@Test @Test
public void issueI88Z4ZTest() { public void issueI88Z4ZTest() {
final String size = DataSizeUtil.format(10240000); final String size = DataSizeUtil.format(10240000);