mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
DataSizeUtil 新增format方法(issue#IB6UUX@Gitee)
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
package cn.hutool.core.io.unit;
|
||||
|
||||
import cn.hutool.core.util.ArrayUtil;
|
||||
|
||||
import java.text.DecimalFormat;
|
||||
|
||||
/**
|
||||
@@ -35,4 +37,20 @@ public class DataSizeUtil {
|
||||
return new DecimalFormat("#,##0.##")
|
||||
.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];
|
||||
}
|
||||
}
|
||||
|
@@ -44,10 +44,12 @@ public enum DataUnit {
|
||||
*/
|
||||
TERABYTES("TB", DataSize.ofTerabytes(1));
|
||||
|
||||
/**
|
||||
* 单位后缀
|
||||
*/
|
||||
public static final String[] UNIT_NAMES = new String[]{"B", "KB", "MB", "GB", "TB", "PB", "EB"};
|
||||
|
||||
private final String suffix;
|
||||
|
||||
private final DataSize size;
|
||||
|
||||
|
||||
@@ -56,6 +58,16 @@ public enum DataUnit {
|
||||
this.size = size;
|
||||
}
|
||||
|
||||
/**
|
||||
* 单位后缀
|
||||
*
|
||||
* @return 单位后缀
|
||||
* @since 5.8.34
|
||||
*/
|
||||
public String getSuffix() {
|
||||
return this.suffix;
|
||||
}
|
||||
|
||||
DataSize size() {
|
||||
return this.size;
|
||||
}
|
||||
@@ -76,5 +88,4 @@ public enum DataUnit {
|
||||
}
|
||||
throw new IllegalArgumentException("Unknown data unit suffix '" + suffix + "'");
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -1,8 +1,9 @@
|
||||
package cn.hutool.core.io.unit;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
public class DataSizeUtilTest {
|
||||
|
||||
@Test
|
||||
@@ -61,6 +62,18 @@ public class DataSizeUtilTest {
|
||||
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
|
||||
public void issueI88Z4ZTest() {
|
||||
final String size = DataSizeUtil.format(10240000);
|
||||
|
Reference in New Issue
Block a user