سؤال

كنت أتساءل عما إذا كان أي شخص يعرف طريقة جيدة لتنسيق أحجام الملفات في صفحات 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 -->
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top