2009-04-29 6 views
4

Java/JSP/JSTLページでファイルサイズをフォーマットする良い方法が分かっているのだろうか。Java/JSTLでファイルサイズをフォーマットする

これにはutilクラスがありますか?
私はコモンズを検索しましたが、何も見つかりませんでした。カスタムタグはありますか?
これのためのライブラリは既に存在しますか?

理想的には私はそれがUnixのののlsコマンド

34に-hスイッチのように振る舞うしたい - > 2.6K
2705 - > 34
795 - > 795
2646 - > 2.7K
4096 - > 4.0K
13588 - > 14K
28282471 - > 27M
28533748 - > 28M

答えて

6

素早い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を使用して< 1024のケースを処理する必要があります。

+0

はhttp://stackoverflow.com/を見ます質問/ 3758606 /より洗練されたソリューションのためのバイト・サイズから人間が読める形式のJavaへの変換方法 – Niko

5

commons-io FileUtils.byteCountToDisplaySizeメソッドを使用できます。あなたのクラスパス上のコモンズ-IOを有しながら、JSTLの実装については、次のtaglib機能を追加することができます:あなたが行うことができますあなたのJSPで今

<function> 
    <name>fileSize</name> 
    <function-class>org.apache.commons.io.FileUtils</function-class> 
    <function-signature>String byteCountToDisplaySize(long)</function-signature> 
</function> 

を:

<%@ taglib uri="/WEB-INF/FileSizeFormatter.tld" prefix="sz"%> 
Some Size: ${sz:fileSize(1024)} <!-- 1 K --> 
Some Size: ${sz:fileSize(10485760)} <!-- 10 MB --> 
関連する問題