java 目录的大小,java 计算文件或目录大小

package com.io;

/**

*

* 此类用于获得文件或者目录大小

*

* FileSize.toString()以KB,MB,GB形式返回字符串

*

* getLongSize()以字节形式返回文件或者目录大小

*

* 关键方法

*

* File.length返回文件的字节

*

* author:yehaizi

*

*/

import java.io.File;

import java.io.IOException;

import java.math.BigDecimal;

public class FileSize {

//bt字节参考量

public static final long SIZE_BT=1024L;

//KB字节参考量

public static final long SIZE_KB=SIZE_BT*1024L;

//MB字节参考量

public static final long SIZE_MB=SIZE_KB*1024L;

//GB字节参考量

public static final long SIZE_GB=SIZE_MB*1024L;

//TB字节参考量

public static final long SIZE_TB=SIZE_GB*1024L;

public static final int SACLE=2;

//文件属性

private File file;

//文件大小属性

private long longSize;

public FileSize(File file)

{

this.file=file;

}

//返回文件大小

private void getFileSize()throws RuntimeException,IOException

{

//初始化文件大小为0;

this.longSize=0;

//如果文件存在而且是文件,直接返回文件大小

if(file.exists()&&file.isFile())

{

this.longSize= file.length();

//文件存在而且是目录,递归遍历文件目录计算文件大小

}else if(file.exists()&&file.isDirectory())

{

getFileSize(file);//递归遍历

}else

{

throw new RuntimeException("指定文件不存在");

}

}

//递归遍历文件目录计算文件大小

private void getFileSize(File file)throws RuntimeException,IOException

{

//获得文件目录下文件对象数组

File[] fileArray=file.listFiles();

//如果文件目录数组不为空或者length!=0,即目录为空目录

if(fileArray!=null&&fileArray.length!=0)

{

//遍历文件对象数组

for(int i=0;i

{

File fileSI=fileArray[i];

//如果是目录递归遍历

if(fileSI.isDirectory())

{

//递归遍历

getFileSize(fileSI);

}

//如果是文件

if(fileSI.isFile())

{

this.longSize+=fileSI.length();

}

}

}else

{

//如果文件目录数组为空或者length==0,即目录为空目录

this.longSize=0;

}

}

public String toString()throws RuntimeException

{

try

{

//调用计算文件或目录大小方法

getFileSize();

if(this.longSize>=0&&this.longSize

{

return this.longSize+"B";

}else if(this.longSize>=SIZE_BT&&this.longSize

{

return this.longSize/SIZE_BT+"KB";

}else if(this.longSize>=SIZE_KB&&this.longSize

{

return this.longSize/SIZE_KB+"MB";

}else if(this.longSize>=SIZE_MB&&this.longSize

{

BigDecimal longs=new BigDecimal(Double.valueOf(this.longSize+"").toString());

BigDecimal sizeMB=new BigDecimal(Double.valueOf(SIZE_MB+"").toString());

String result=longs.divide(sizeMB, SACLE,BigDecimal.ROUND_HALF_UP).toString();

//double result=this.longSize/(double)SIZE_MB;

return result+"GB";

}else

{

BigDecimal longs=new BigDecimal(Double.valueOf(this.longSize+"").toString());

BigDecimal sizeMB=new BigDecimal(Double.valueOf(SIZE_GB+"").toString());

String result=longs.divide(sizeMB, SACLE,BigDecimal.ROUND_HALF_UP).toString();

return result+"TB";

}

}

catch(IOException ex)

{

ex.printStackTrace();

throw new RuntimeException(ex.getMessage());

}

}

public File getFile() {

return file;

}

public void setFile(File file) {

this.file = file;

}

public long getLongSize()throws RuntimeException {

try

{

//调用计算文件或目录大小方法

getFileSize();

return longSize;

}

catch(IOException ex)

{

ex.printStackTrace();

throw new RuntimeException(ex.getMessage());

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值