5 Stimmen

Formatierung von Dateigrößen in Java/JSTL

Ich habe mich gefragt, ob jemand eine gute Möglichkeit kennt, die Dateigrößen in Java/JSP/JSTL-Seiten zu formatieren.

Gibt es eine util-Klasse, die das kann?
Ich habe Commons durchsucht, aber nichts gefunden. Irgendwelche benutzerdefinierten Tags?
Gibt es dafür bereits eine Bibliothek?

Im Idealfall sollte es sich so verhalten wie die -h Schalter auf dem Unix-System ls Befehl

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

7voto

kgiannakakis Punkte 100768

Eine schnelle Google-Suche brachte mich zurück este aus dem Appache-Hadoop-Projekt. Ich kopiere von dort: (Apache-Lizenz, Version 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;
  }

Es wird 1K = 1024 verwendet, aber Sie können dies anpassen, wenn Sie möchten. Sie müssen auch den Fall <1024 mit einem anderen DecimalFormat behandeln.

0 Stimmen

Siehe stackoverflow.com/questions/3758606/ für eine saubere Lösung

6voto

Brett Ryan Punkte 24930

Sie können die commons-io FileUtils.byteCountToDisplaySize Methoden. Für eine JSTL-Implementierung können Sie die folgende Taglib-Funktion hinzufügen, wenn Sie commons-io in Ihrem Klassenpfad haben:

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

Jetzt können Sie in Ihrer JSP tun:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X