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()); 
                //return (o1.getKey()).toString().compareTo(o2.getKey());
            }
        });
        for (int i = 0; i < fileinfo.size(); i++) {
            System.out.println(fileinfo.get(i).getKey()+"'s size is: "+fileinfo.get(i).getValue()/1024/1024F);
        }
    }    
}

 

 

posted @ 2012-07-01 15:39  莫忆往西  阅读(339)  评论(0)    收藏  举报