⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filesizeformat.java

📁 JR 公共类库 --Java研究组织开源子项目 本项目的发起的初衷是丰富和完善java的类库
💻 JAVA
字号:
package org.jr.text;

/**
 * <p>Copyright: Copyright (c) 2002-2003</p>
 * <p>Company: JavaResearch(http://www.javaresearch.org)</p>
 * <p>最后更新日期:2003年3月3日
 * @author Cherami
 */

import java.text.*;

/**
 * 文件大小格式化类。
 * 这个类本来应该是从NumberFormat类继承而来,但是由于NumberFormat的format(long number)被定义为
 * final的,因此采取从Format继承,其内容实际就是一个NumberFormat。
 * @since  0.5
 */
public class FileSizeFormat
    extends Format {
  public static final int BYTE = 0;
  public static final int KILO = 1;
  public static final int MEGA = 2;
  public static final int GIGA = 3;
  public static final long KILOBYTE = 1024;
  public static final long MEGABYTE = 1024 * 1024;
  public static final long GIGABYTE = 1024 * 1024 * 1024;
  public static final String[] defaultUnitNames = {
      "B", "K", "M", "G"};
  public static final String defaultFormat = "#,##0.##";
  String format;
  String[] unitNames;
  boolean showUnitName = false;
  NumberFormat formatter;
  /**
   * 得到一个缺省的FileSizeFormat。
   * 即不显示尺寸的单位,格式为缺省格式"#,##0.##"。
   * @since  0.5
   */
  public FileSizeFormat() {
    this(defaultFormat, false, null);
  }

  /**
   * 根据指定的格式构造一个FileSizeFormat。
   * 不显示尺寸的单位。
   * @param format 格式
   * @since  0.5
   */
  public FileSizeFormat(String format) {
    this(format, false, null);
  }

  /**
   * 根据指定的属性构造一个FileSizeFormat。
   * @param showUnitName 是否显示单位
   * @since  0.5
   */
  public FileSizeFormat(boolean showUnitName) {
    this(defaultFormat, showUnitName, defaultUnitNames);
  }

  /**
   * 根据指定单位构造一个FileSizeFormat。
   * 显示尺寸的单位。
   * @param unitNames 单位,依次为字节、千字节、兆字节和百兆字节的单位。
   * @since  0.5
   */
  public FileSizeFormat(String[] unitNames) {
    this(defaultFormat, true, unitNames);
  }

  /**
   * 根据指定的格式和单位构造一个FileSizeFormat。
   * 显示尺寸的单位。
   * @param format 格式
   * @param unitNames 单位,依次为字节、千字节、兆字节和百兆字节的单位。
   * @since  0.5
   */
  public FileSizeFormat(String format, String[] unitNames) {
    this(format, true, unitNames);
  }

  /**
   * 根据指定的格式和是否显示尺寸单位构造一个FileSizeFormat。
   * @param format 格式
   * @param showUnitName true的时候显示单位,使用缺省的单位。
   * @since  0.5
   */
  public FileSizeFormat(String format, boolean showUnitName) {
    this(format, showUnitName, defaultUnitNames);
  }

  /**
   * 根据指定的格式和是否显示尺寸单位构造一个FileSizeFormat。
   * @param format 格式
   * @param showUnitName true的时候显示单位,使用缺省的单位。
   * @param unitNames 单位,依次为字节、千字节、兆字节和百兆字节的单位。
   * @since  0.5
   */
  public FileSizeFormat(String format, boolean showUnitName, String[] unitNames) {
    this.format = format;
    formatter = new DecimalFormat(format);
    this.showUnitName = showUnitName;
    this.unitNames = unitNames;
  }

  /**
   * 得到可读的数字大小,一般用于文件尺寸。
   * @param number 数字,一般应该是Long类型的
   * @return 格式化以后的字符串
   * @since  0.5
   */
  public String format(Number number) {
    return format(number.longValue(), getUnit(number.longValue()));
  }

  /**
   * 得到可读的数字大小。
   * @param size 原始大小
   * @return 格式化以后的字符串
   * @since  0.5
   */
  public String format(long size) {
    return format(size, getUnit(size));
  }

  /**
   * 得到数字的单位,一般用于文件尺寸。
   * @param number 数字,一般应该是Long类型的
   * @return number的long值在1024以下时返回BYTE,依次类推直到GIGA。
   * @since  0.5
   */
  public int getUnit(Number number) {
    return getUnit(number.longValue());
  }

  /**
   * 得到数字的单位。
   * @param size 原始大小
   * @return size的值在1024以下时返回BYTE,依次类推直到GIGA。
   * @since  0.5
   */
  public int getUnit(long size) {
    if (size < KILOBYTE) {
      return BYTE;
    }
    else if (size < MEGABYTE) {
      return KILO;
    }
    else if (size < GIGABYTE) {
      return MEGA;
    }
    else {
      return GIGA;
    }
  }

  /**
   * 得到格式化的大小。
   * @param number 原始大小
   * @param unit 单位
   * @return 根据单位进行格式化后的字符串大小
   * @since  0.5
   */
  public String format(Number number, int unit) {
    return format(number.longValue(), unit);
  }

  /**
   * 设置格式化时的格式。
   * @param format 格式
   * @since  0.5
   */
  public void setFormat(String format) {
    this.format = format;

  }

  /**
   * 得到格式时的格式。
   * @return 格式时的格式
   * @since  0.5
   */
  public String getFormat() {
    return format;
  }

  /**
   * 得到格式化的大小。
   * @param size 原始大小
   * @param unit 单位
   * @return 根据单位进行格式化后的字符串大小
   * @since  0.5
   */
  public String format(long size, int unit) {
    String result;
    switch (unit) {
      case BYTE:
        result = formatter.format(size);
        break;
      case KILO:
        result = formatter.format( ( (double) size) / ( (double) KILOBYTE));
        break;
      case MEGA:
        result = formatter.format( ( (double) size) / ( (double) MEGABYTE));
        break;
      case GIGA:
        result = formatter.format( ( (double) size) / ( (double) GIGABYTE));
        break;
      default:
        result = formatter.format(size);
        break;
    }
    if (showUnitName == true) {
      result += unitNames[unit];
    }
    return result;
  }

  /**
   * 设置显示单位的名称。
   * 这个方法同时也会将设置显示单位名称。
   * @param unitNames 名称数组
   * @since  0.5
   */
  public void setUnitNames(String[] unitNames) {
    showUnitName = true;
    this.unitNames = unitNames;
  }

  /**
   * 返回显示名称数组。
   * @return 名称数组
   * @since  0.5
   */
  public String[] getUnitNames() {
    return unitNames;
  }

  /**
   * 设置是否显示单位名称。
   * 如果显示单位名称但是名称数组为null时设置为缺省单位名称。
   * @param visible 是否显示单位名称
   * @since  0.5
   */
  public void setUnitNameVisible(boolean visible) {
    showUnitName = visible;
    if (showUnitName == true && unitNames == null) {
      unitNames = defaultUnitNames;
    }
  }

  /**
   * 是否显示单位名称。
   * @return 显示时返回true,否则返回false
   * @since  0.5
   */
  public boolean isUnitNameVisible() {
    return showUnitName;
  }

  /**
   * 解析字符串为一个对象。
   * @param source 要解析的对象字符串
   * @param pos 解析位置
   * @return 经NumberFormat解析的结果
   * @since  0.5
   */
  public Object parseObject(String source,
                            ParsePosition pos) {
    return formatter.parseObject(source, pos);
  }

  /**
   * 根据指定的对象和附加对象进行格式化。
   * @param obj 格式化的对象
   * @param toAppendTo 附件的文本信息
   * @param pos 格式化的文本中的位置信息
   * @return 经NumberFormat格式化以后的StringBuffer
   * @since  0.5
   */
  public StringBuffer format(Object obj,
                             StringBuffer toAppendTo,
                             FieldPosition pos) {
    return formatter.format(obj, toAppendTo, pos);

  }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -