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);
}
}
}
本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。

浙公网安备 33010602011771号