• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 我的Android进阶之旅------)Java文件大小转换工具类 (B,KB,MB,GB,TB,PB之间的大小转换)

我的Android进阶之旅------)Java文件大小转换工具类 (B,KB,MB,GB,TB,PB之间的大小转换)

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了我的Android进阶之旅------)Java文件大小转换工具类 (B,KB,MB,GB,TB,PB之间的大小转换)等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

我的Android进阶之旅------)Java文件大小转换工具类 (B,KB,MB,GB,TB,PB之间的大小转换)


Java文件大小转换工具类 (B,KB,MB,GB,TB,PB之间的大小转换)

有时候要做出如下所示的展示文件大小的效果时候,需要对文件大小进行转换,然后再进行相关的代码逻辑编写。

这里写图片描述

/***
 * 存储大小(单位)转换器.
 */
public enum SizeConverter {
    /**
     * 转换任意单位的大小, 返回结果会包含两位小数但不包含单位.
     */
    Arbitrary {
        @Override
        public String convert(float size) {
            while (size > 1024) {
                size /= 1024;
            }
            return String.format(FORMAT_F, size);
        }
    },

    // -----------------------------------------------------------------------
    // 有单位

    /**
     * 转换单位为B的大小, 返回结果会包含两位小数以及单位. 如: 1024B->1KB, (1024*1024)B->1MB
     */
    B {
        @Override
        public String convert(float B) {
            return converter(0, B);
        }
    },

    /**
     * 转换单位为KB的大小, 返回结果会包含两位小数以及单位.
     */
    KB {
        @Override
        public String convert(float KB) {
            return converter(1, KB);
        }
    },

    /**
     * 转换单位为MB的大小, 返回结果会包含两位小数以及单位.
     */
    MB {
        @Override
        public String convert(float MB) {
            return converter(2, MB);
        }
    },

    /**
     * 转换单位为GB的大小, 返回结果会包含两位小数以及单位.
     */
    GB {
        @Override
        public String convert(float GB) {
            return converter(3, GB);
        }
    },

    /**
     * 转换单位为TB的大小, 返回结果会包含两位小数以及单位.
     */
    TB {
        @Override
        public String convert(float TB) {
            return converter(4, TB);
        }
    },

    // -----------------------------------------------------------------------
    // trim没单位
    /**
     * 转换任意单位的大小, 返回结果小数部分为0时将去除两位小数, 不包含单位.
     */
    ArbitraryTrim {
        @Override
        public String convert(float size) {
            while (size > 1024) {
                size /= 1024;
            }

            int sizeInt = (int) size;
            boolean isfloat = size - sizeInt > 0.0F;
            if (isfloat) {
                return String.format(FORMAT_F, size);
            }
            return String.format(FORMAT_D, sizeInt);
        }
    },

    // -----------------------------------------------------------------------
    // trim有单位
    /**
     * 转换单位为B的大小, 返回结果小数部分为0时将去除两位小数, 会包含单位.
     */
    BTrim {
        @Override
        public String convert(float B) {
            return trimConverter(0, B);
        }
    },
    /**
     * 转换单位为KB的大小, 返回结果小数部分为0时将去除两位小数, 会包含单位.
     */
    KBTrim {
        @Override
        public String convert(float KB) {
            return trimConverter(1, KB);
        }
    },
    /**
     * 转换单位为MB的大小, 返回结果小数部分为0时将去除两位小数, 会包含单位.
     */
    MBTrim {
        @Override
        public String convert(float MB) {
            return trimConverter(2, MB);
        }
    },
    /**
     * 转换单位为GB的大小, 返回结果小数部分为0时将去除两位小数, 会包含单位.
     */
    GBTrim {
        @Override
        public String convert(float GB) {
            return trimConverter(3, GB);
        }
    },
    /**
     * 转换单位为TB的大小, 返回结果小数部分为0时将去除两位小数, 会包含单位.
     */
    TBTrim {
        @Override
        public String convert(float TB) {
            return trimConverter(4, TB);
        }
    };

    /***
     * 

将指定的大小转换到1024范围内的大小. 注意该方法的最大单位为PB, 最小单位为B, * 任何超出该范围的单位最终会显示为**.

* * @param size 要转换的大小, 注意是浮点数, 不要以整形的方式传入, 容易造成溢出. * (如: 1024*1024*1024*1024*1024会溢出, 使结果为0, 因为它先将结果以int相乘后再转换为float; * 而1024.0F*1024.0F*1024.0F*1024.0F*1024.0F就不会溢出) * @return */ abstract public String convert(float size); // ----------------------------------------------------------------------- // 单位转换 private static final String[] UNITS = new String[]{ "B", "KB", "MB", "GB", "TB", "PB", "**" }; private static final int LAST_IDX = UNITS.length - 1; private static final String FORMAT_F = "%1$-1.2f"; private static final String FORMAT_F_UNIT = "%1$-1.2f%2$s"; private static final String FORMAT_D = "%1$-1d"; private static final String FORMAT_D_UNIT = "%1$-1d%2$s"; // ----------------------------------------------------------------------- private static String converter(int unit, float size) { int unitIdx = unit; while (size > 1024) { unitIdx++; size /= 1024; } int idx = unitIdx < LAST_IDX ? unitIdx : LAST_IDX; return String.format(FORMAT_F_UNIT, size, UNITS[idx]); } private static String trimConverter(int unit, float size) { int unitIdx = unit; while (size > 1024) { unitIdx++; size /= 1024; } int sizeInt = (int) size; boolean isfloat = size - sizeInt > 0.0F; int idx = unitIdx < LAST_IDX ? unitIdx : LAST_IDX; if (isfloat) { return String.format(FORMAT_F_UNIT, size, UNITS[idx]); } return String.format(FORMAT_D_UNIT, sizeInt, UNITS[idx]); } // ----------------------------------------------------------------------- public static String convertBytes(float B, boolean trim) { return trim ? trimConvert(0, B, true) : convert(0, B, true); } public static String convertKB(float KB, boolean trim) { return trim ? trimConvert(1, KB, true) : convert(1, KB, true); } public static String convertMB(float MB, boolean trim) { return trim ? trimConvert(2, MB, true) : convert(2, MB, true); } /*** *

存储大小单位间的转换. 注意该方法的最大单位为PB, 最小单位为B, * 任何超出该范围的单位最终会显示为**.

* * @param unit 从哪个单位开始 * @param size 存储大小, 注意是float, 不要以整形的形式传入, 否则会溢出(如:1024*1024这种, * 它是先将1024*1024作为int相乘再转换为float的, 如果值过大的话就会溢出了, * 所以这么写1024.0F*1024.0F) * @param withUnit 返回的结果字符串是否带有对应的单位 * @return */ private static String convert(int unit, float size, boolean withUnit) { int unitIdx = unit; while (size > 1024) { unitIdx++; size /= 1024; } if (withUnit) { int idx = unitIdx < LAST_IDX ? unitIdx : LAST_IDX; return String.format(FORMAT_F_UNIT, size, UNITS[idx]); } return String.format(FORMAT_F, size); } /*** *

存储大小单位间的转换, 如果转换后小数部分为0, 则去除小数部分. * 注意该方法的最大单位为PB, 最小单位为B, 任何超出该范围的单位最终会显示为**.

* * @param unit 从哪个单位开始 * @param size 存储大小, 注意是float, 不要以整形的形式传入, 否则会溢出(如:1024*1024这种, * 它是先将1024*1024作为int相乘再转换为float的, 如果值过大的话就会溢出了, * 所以这么写1024.0F*1024.0F) * @param withUnit 返回的结果字符串是否带有对应的单位 * @return */ private static String trimConvert(int unit, float size, boolean withUnit) { int unitIdx = unit; while (size > 1024) { unitIdx++; size /= 1024; } int sizeInt = (int) size; boolean isfloat = size - sizeInt > 0.0F; if (withUnit) { int idx = unitIdx < LAST_IDX ? unitIdx : LAST_IDX; if (isfloat) { return String.format(FORMAT_F_UNIT, size, UNITS[idx]); } return String.format(FORMAT_D_UNIT, sizeInt, UNITS[idx]); } if (isfloat) { return String.format(FORMAT_F, size); } return String.format(FORMAT_D, sizeInt); } }

下面用一个测试类来测试一下

public class SizeConverterTest {
    public static void main(String[] args) {
         System.out.println(SizeConverte



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 我的Android进阶之旅------)Java文件大小转换工具类 (B,KB,MB,GB,TB,PB之间的大小转换)

相关文章

  • 2017-05-26Stack Overflow 排错翻译,stackoverflow
  • 2017-05-26Eclipse下配置Ant脚本 自动打包带签名的Android apk(PC环境为MAC)
  • 2017-05-26activity的横屏和竖屏设置,activity
  • 2017-10-15Android源码基础解析之Activity布局绘制流程
  • 2017-05-26位图索引(Bitmap Index)与数据DML LOCK场景问题解析
  • 2017-05-26支付宝插件,支付宝
  • 2017-05-26Android-BroadcastReceiver详解
  • 2017-05-26移动端web头部header通用写法
  • 2017-05-26[android] 数据的异步加载和图片保存,
  • 2017-05-26Android UI相关开源项目库汇总,android开源项目

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 如何解决Linux系统中的Navicat for MySQL 1045错误
    • 4.1.1 Activity初学乍练
    • 【android开发笔记】为Button的背景图片添加边框式样式效果,
    • 仿拉手团购App4--我的模块,拉手团购app4--
    • Android MediaPlayer 音乐播放
    • 2.3.2 EditText(输入框)详解
    • 8.3.8 Paint API之—— Xfermode与PorterDuff详解(五)
    • Android设计模式(十六)-中介者模式
    • Android工程文件下assets文件夹与res文件夹的区别
    • WebView的基本使用,WebView使用

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有