This question already has answers here:
How can I convert byte size into a human-readable format in Java?
(28个答案)
已关闭6年。
我想知道是否有人知道格式化Java/JSP/JSTL页面中文件大小的好方法。
是否有一个util类可以做到这一点?
我已经搜索过公地,但一无所获。是否有任何自定义标签?
为此已经存在一个库吗?
理想情况下,我希望它的行为类似于Unix的 ls 命令上的 -h 开关
34-> 34
795-> 795
2646-> 2.6K
2705-> 2.7K
4096-> 4.0K
13588-> 14K
28282471-> 27M
28533748-> 28M
(28个答案)
已关闭6年。
我想知道是否有人知道格式化Java/JSP/JSTL页面中文件大小的好方法。
是否有一个util类可以做到这一点?
我已经搜索过公地,但一无所获。是否有任何自定义标签?
为此已经存在一个库吗?
理想情况下,我希望它的行为类似于Unix的 ls 命令上的 -h 开关
34-> 34
795-> 795
2646-> 2.6K
2705-> 2.7K
4096-> 4.0K
13588-> 14K
28282471-> 27M
28533748-> 28M
最佳答案
快速的Google搜索从Appache hadoop项目返回了this。从那里复制:
(Apache许可证,版本2.0):
private static DecimalFormat oneDecimal = new DecimalFormat("0.0");
/**
* Given an integer, return a string that is in an approximate, but human
* readable format.
* It uses the bases 'k', 'm', and 'g' for 1024, 1024**2, and 1024**3.
* @param number the number to format
* @return a human readable form of the integer
*/
public static String humanReadableInt(long number) {
long absNumber = Math.abs(number);
double result = number;
String suffix = "";
if (absNumber < 1024) {
// nothing
} else if (absNumber < 1024 * 1024) {
result = number / 1024.0;
suffix = "k";
} else if (absNumber < 1024 * 1024 * 1024) {
result = number / (1024.0 * 1024);
suffix = "m";
} else {
result = number / (1024.0 * 1024 * 1024);
suffix = "g";
}
return oneDecimal.format(result) + suffix;
}
它使用1K = 1024,但是您可以根据需要进行调整。您还需要使用其他DecimalFormat处理10-06 02:37