تنسيق أحجام الملفات في Java/JSTL [نسخة مكررة]
-
03-07-2019 - |
سؤال
هذا السؤال لديه بالفعل إجابة هنا:
كنت أتساءل عما إذا كان أي شخص يعرف طريقة جيدة لتنسيق أحجام الملفات في صفحات Java/JSP/JSTL.
هل هناك فئة استخدام تفعل هذا؟
لقد بحثت في المشاعات ولكن لم أجد شيئًا.أي علامات مخصصة؟
هل توجد مكتبة بالفعل لهذا؟
من الناحية المثالية، أود أن تتصرف مثل -ح قم بتشغيل يونكس ليرة سورية يأمر
34 -> 34
795 -> 795
2646 -> 2.6 كيلو
2705 -> 2.7 ألف
4096 -> 4.0 ألف
13588 -> 14 كيلو
28282471 -> 27 م
28533748 -> 28 م
المحلول
أعادني بحث جوجل السريع هذا من مشروع أباتشي hadoop.النسخ من هناك:(ترخيص أباتشي، الإصدار 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، ولكن يمكنك تعديل ذلك إذا كنت تفضل ذلك.تحتاج أيضًا إلى التعامل مع الحالة <1024 باستخدام تنسيق عشري مختلف.
نصائح أخرى
يمكنك استخدام المشاعات io FileUtils.byteCountToDisplaySize
طُرق.بالنسبة لتطبيق JSTL، يمكنك إضافة دالة taglib التالية مع وجود commons-io في مسار الفصل الدراسي الخاص بك:
<function>
<name>fileSize</name>
<function-class>org.apache.commons.io.FileUtils</function-class>
<function-signature>String byteCountToDisplaySize(long)</function-signature>
</function>
الآن في JSP الخاص بك، يمكنك القيام بما يلي:
<%@ taglib uri="/WEB-INF/FileSizeFormatter.tld" prefix="sz"%>
Some Size: ${sz:fileSize(1024)} <!-- 1 K -->
Some Size: ${sz:fileSize(10485760)} <!-- 10 MB -->