Форматирование размеров файлов в Java / JSTL [дублировать]

StackOverflow https://stackoverflow.com/questions/801935

  •  03-07-2019
  •  | 
  •  

Вопрос

На этот вопрос уже есть ответ здесь:

Мне было интересно, знает ли кто-нибудь о хорошем способе форматирования размеров файлов на страницах Java / JSP / JSTL.

Есть ли класс util, который с этим справляется?
Я обыскал общий доступ, но ничего не нашел.Есть какие-нибудь пользовательские теги?
Существует ли уже библиотека для этого?

В идеале я бы хотел, чтобы он вел себя как включите Unix's ls команда

34 -> 34
795 -> 795
2646 -> 2,6 К
2705 -> 2,7 К
4096 -> 4,0К
13588 -> 14K
28282471 -> 27 м
28533748 -> 28 М

Это было полезно?

Решение

Быстрый поиск в Google вернул меня обратно это из проекта Appache hadoop.Копирование оттуда:(Лицензия 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, но вы можете адаптировать это, если хотите.Вам также необходимо справиться с <регистр 1024 с другим десятичным форматом.

Другие советы

Вы можете использовать commons-io FileUtils.byteCountToDisplaySize методы.Для реализации на JSTL вы можете добавить следующую функцию taglib, имея commons-io в вашем classpath:

<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