Java 读取文件大写和格式化输出字串

来源:互联网 发布:淘宝怎么复制淘口令 编辑:程序博客网 时间:2024/05/16 12:10

前言

在Java 的File 类中, 有一个 length() 的方法, 可以返回long型的文件的大小,  单位是字节。

对于系统的使用者来说,这个输出是不太容易理解的, 所以把这个long 型的值换算成  KB, MB , GB 或是TB为单位的String 显示就很必要了。


得到格式化字串

直接上代码:

        private static  String getFileSizeStr(long fileSize){String sFileSize = "";if(fileSize>0){double dFileSize = (double)fileSize;double kiloByte = dFileSize/1024;if(kiloByte < 1){return sFileSize + "Byte(s)";}double megaByte = kiloByte/1024;if(megaByte < 1){sFileSize = String.format("%.2f",kiloByte);return sFileSize + "KB";}double gigaByte = megaByte/1024;if(gigaByte<1){sFileSize = String.format("%.2f",megaByte);return sFileSize + "MB";}double teraByte = gigaByte/1024;if(teraByte<1){sFileSize = String.format("%.2f",gigaByte);return sFileSize + "GB";}sFileSize = String.format("%.2f",teraByte);return sFileSize + "TB";}return sFileSize;}

需要说明的是:

1. 这里的1MB  = 1024 KB (也有的地方为了方便直接使用1000的)

2.  long 型的文件大小值需要先转换成 double, 再除以1024, 否则的话得到的小数位数就都是 .00 了 (原因很简单,是java基础的内容, 只是code 的时候容易忽略这个)

        当 long i = 5;

比较
        double d = i/3;  ==> 1.0

        与
         double d = (double)i/3;  ==> 1.6666666...

的区别就知道了.

3. 保留两为小数的写法

 String.format("%.2f",gigaByte);


保留小数位数

从以上的第三点, 引申说一下在Java 中,如果保留指定的小数位数

方法1: 使用String.format 的方式

String.format是在JDK1.5中新增的静态方法,功能强。它主要功能是格式化数据,大致分为这些类(常规类型、字符类型、数值类型、日期类型)

语法是:

常规类型、字符类型和数值类型的格式说明符的语法:%[参数索引位置$][转换标识符][最小官渡][.保留精度位数]转换方式

日期语法:%[参数索引位置$][t或T]转换方式


     *   %[index$][标识][最小宽度][保留精度]转换方式
     *      标识:
     *          '-'    在最小宽度内左对齐,不可以与“用0填充”同时使用
     *          '+'    结果总是包括一个符号
     *          '  '    正值前加空格,负值前加负号
     *          '0'    结果将用零来填充
     *          ','    每3位数字之间用“,”分隔(只适用于fgG的转换)
     *          '('    若参数是负数,则结果中不添加负号而是用圆括号把数字括起来(只适用于eEfgG的转换)
     *      最小宽度: 最终该整数转化的字符串最少包含多少位数字
     *      保留精度:保留小数位后面个数
     *      转换方式:
     *          'e', 'E'  --  结果被格式化为用计算机科学记数法表示的十进制数
     *          'f'       --  结果被格式化为十进制普通表示方式
     *          'g', 'G'  --  根据具体情况,自动选择用普通表示方式还是科学计数法方式
     *          'a', 'A'  --  结果被格式化为带有效位数和指数的十六进制浮点数

细部使用可以参见Java API.


也可参考 http://www.cnblogs.com/xytop/archive/2008/08/26/1277125.html


方法2: 使用BigDecimal

BigDecimal 是需要高精度时可以使用的

    double   f   =   111231.5585;  BigDecimal   b   =   new   BigDecimal(f);      double   f1   =   b.setScale(2,   BigDecimal.ROUND_HALF_UP).doubleValue();  

BigDecimal.ROUND_HALF_UP 是设定四舍五入


方法3: 使用 java.text.DecimalFormat

String s = new java.text.DecimalFormat("#.00").format(3.1415926);

方法4: 使用 NumberFormat

    NumberFormat ddf1=NumberFormat.getNumberInstance() ;     ddf1.setMaximumFractionDigits(2);    s = ddf1.format(3.1415926) ;    System.out.print(s);