代码之家  ›  专栏  ›  技术社区  ›  chillitom Cee McSharpface

在爪哇/jSTL中格式化文件大小[复制]

  •  4
  • chillitom Cee McSharpface  · 技术社区  · 15 年前

    我想知道有没有人知道一种在Java/JSP/JSTL页面中格式化文件大小的好方法。

    是否有一个这样做的Util类?
    我搜索过公共场所,但一无所获。有自定义标签吗?
    是否已存在用于此的库?

    理想情况下,我希望它表现得像 -H 打开Unix LS 命令

    34和34;
    795和795;
    2646和2.6K
    2705和2.7K
    4096和-4.0K
    13588和-14K
    28282471->27米
    28533748-28米

    2 回复  |  直到 11 年前
        1
  •  6
  •   kgiannakakis    15 年前

    一个快速的谷歌搜索返回了我 this 来自AppacheHadoop项目。从那里复制: (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处理<1024大小写。

        2
  •  5
  •   Brett Ryan    11 年前

    你可以使用通用IO FileUtils.byteCountToDisplaySize 方法。对于JSTL实现,可以在类路径上具有commons io的同时添加以下taglib函数:

    <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 -->