Java统计目录大小

   手机自带了2G的存储卡,最近因为SD卡空间的问题发现程序都装不了,于是就想找出卡里面到底是那些目录占用了实际的空间,windows按浏览器按大小排序解决不了目录的问题,只能自己写程序递归遍历了。最后发现是.android_secure这货占了600M的空间,这里是安装在SD卡中的程序,果断把之前没用的程序文件删掉,腾出了一大笔空间。想折腾了还可以用jfreechart用图标的形式将空间的使用情况展示出来,一目了然。

package time.goes.by;


public class MainFrame {

/**

* @param args

*/

public static void main(String[] args) {

FileAttr fileattr = new FileAttr();

String filepath = "J:\\.android_secure";

fileattr.listFileSize(filepath);

fileattr.outputFileSize();

}

}


package time.goes.by;


import java.io.File;

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.HashMap;

import java.util.List;

import java.util.Map;


public class FileAttr {

private Map<String, Long> fileSize = new HashMap<String, Long>();

public FileAttr() {


}


/**

* 获取文件或目录大小

* @param f

* @return 文件大小 单位字节

*/

public long getFileSize(File f) {

long size = 0;

if (f.isDirectory()) {

File flist[] = f.listFiles();

for (File file : flist) {

size +=  getFileSize(file);

}

} else {

size = f.length();

}

return size;

}

public void listFileSize(String filepath) {

String filename = null;

long size = 0;

try {

File local = new File(filepath);

if (local.isDirectory()) {

File filelist[] = local.listFiles();

for (File file : filelist) {

size = getFileSize(file);

filename = file.getName();

fileSize.put(filename, size);

}

} else {

//only a file

size = getFileSize(local);

filename = local.getName();

fileSize.put(filename, size);

}

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* 输出结果

*/

public void outputFileSize() {

List<Map.Entry<String, Long>> fileinfo =

   new ArrayList<Map.Entry<String, Long>>(fileSize.entrySet());

//排序

Collections.sort(fileinfo, new Comparator<Map.Entry<String, Long>>() {   

   public int compare(Map.Entry<String, Long> o1, Map.Entry<String, Long> o2) {      

       return  (int) (o2.getValue() - o1.getValue());         

   }

});

for (int i = 0; i < fileinfo.size(); i++) {

System.out.println(fileinfo.get(i).getKey()+"'s size is: "+fileinfo.get(i).getValue()/1024/1024F);

}

}

}

package time.goes.by;

public class MainFrame {
/**
* @param args
*/
public static void main(String[] args) {
FileAttr fileattr = new FileAttr();
String filepath = "J:\\.android_secure";
fileattr.listFileSize(filepath);
fileattr.outputFileSize();
}

本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。

posted @ 2012-07-01 22:45  莫忆往西  阅读(295)  评论(0)    收藏  举报