为以后写留着查看的地方
转载自http://blog.csdn.net/u014733374/article/details/47153589,具体对不对,后续我会说明
缓存文件的目录我们可以在手机/mnt/sdcard/Android/data/wj.com.universalimageloader(应用包名)/cache/ 目录下看到
看下CacheUtil工具类
/**
* 获取缓存文件大小,这里不仅获取了sdCard缓存文件的目录,还获取了手机缓存的目录
* @param context
* @return
*/
public static String getTotalCacheSize(Context context){
//context.getCacheDir()获取的是内存缓存的目录/data/data/wj.com.universalimageloader/cache
long cacheSize = getFolderSize(context.getCacheDir());
//context.getExternalCacheDir()获取的是sdCard的缓存目录
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
cacheSize += getFolderSize(context.getExternalCacheDir());
}
return getFormatSize(cacheSize);
}
其中用到,getFolderSize(File file)方法
//获取对应文件夹 的总大小
public static long getFolderSize(File file){
long size=0;
try{
File[] files=file.listFiles();
for(int i=0;i<files.length;i++){
//如果下面有文件
if(files[i].isDirectory()){
size=size+getFolderSize(files[i]);
}else{
size=size+files[i].length();
}
}
}catch (Exception e){
e.printStackTrace();
}
return size;
}
还用到了一个将long型大小转换成 xxxKB类型字符串的类型方法,getFormatSize(long l),
/**
* 格式化单位
*
* @param size
* @return
*/
private static String getFormatSize(double size) {
double kiloByte = size / 1024;
if (kiloByte < 1) {
// return size + "Byte";
return "0K";
}
double megaByte = kiloByte / 1024;
if (megaByte < 1) {
BigDecimal result1 = new BigDecimal(Double.toString(kiloByte));
return result1.setScale(2, BigDecimal.ROUND_HALF_UP)
.toPlainString() + "KB";
}
double gigaByte = megaByte / 1024;
if (gigaByte < 1) {
BigDecimal result2 = new BigDecimal(Double.toString(megaByte));
return result2.setScale(2, BigDecimal.ROUND_HALF_UP)
.toPlainString() + "MB";
}
double teraBytes = gigaByte / 1024;
if (teraBytes < 1) {
BigDecimal result3 = new BigDecimal(Double.toString(gigaByte));
return result3.setScale(2, BigDecimal.ROUND_HALF_UP)
.toPlainString() + "GB";
}
BigDecimal result4 = new BigDecimal(teraBytes);
return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString()
+ "TB";
}
以上就实现了获取缓存文件总大小功能,再看清空缓存文件
//清空所有缓存文件夹文件
public static void clearAllCache(Context context) {
deleteDir(context.getCacheDir());
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
deleteDir(context.getExternalCacheDir());
}
}
用到的方法deleteDir(File file)
//删除对应文件夹文件
private static boolean deleteDir(File dir) {
if (dir != null && dir.isDirectory()) {
String[] children = dir.list();
for (int i = 0; i < children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
return dir.delete();
}
上面是一个类里面的所有方法,为了防止代码太长,看的疲惫,就把方法分开展示了。
接下来就看下效果,
MainActivity中我获取了一次总值
String str=CacheUtil.getTotalCacheSize(this);
Log.e("wj","str:"+str);
看下输出
07-3009:33:47.7092729-2729/? E/wj﹕ str:86.78KB
然后我在adapter的图片点击事件里处理了清空缓存的操作
holder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
CacheUtil.clearAllCache(mContext);
String str=CacheUtil.getTotalCacheSize(mContext);
Log.e("wj", "str:" + str);
}
});
再来看下日志:
07-3009:35:37.5612729-2729/?E/wj﹕ str:0K
功能实现,我相信会有更好的方法,但该方法目前已经完全能满足项目需求。有更好的方法的请留言哦,在此感谢!!