mirror of
				https://gitee.com/dromara/hutool.git
				synced 2025-10-31 16:36:56 +08:00 
			
		
		
		
	DataSizeUtil 新增format方法(issue#IB6UUX@Gitee)
This commit is contained in:
		| @@ -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) | ||||||
|   | |||||||
| @@ -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]; | ||||||
|  | 	} | ||||||
| } | } | ||||||
|   | |||||||
| @@ -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 + "'"); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| } | } | ||||||
|   | |||||||
| @@ -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); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Looly
					Looly