package com.smartcontrol.utils;
import java.io.File;
import java.math.BigDecimal;
import android.content.Context;
import android.os.Environment;/**
* 清除缓存
**/
public classCleanMessageUtil {/**
* @param context
* @return
* @throws Exception
* 获取当前缓存*/
public staticString getTotalCacheSize(Context context) throws Exception {long cacheSize =getFolderSize(context.getCacheDir());if(Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
cacheSize+=getFolderSize(context.getExternalCacheDir());
}returngetFormatSize(cacheSize);
}/**
* @param context
* 删除缓存*/
public static voidclearAllCache(Context context) {
deleteDir(context.getCacheDir());if(Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
deleteDir(context.getExternalCacheDir());
}
}private staticboolean deleteDir(File dir) {if (dir != null &&dir.isDirectory()) {
String[] children=dir.list();int size = 0;if (children != null) {
size=children.length;for (int i = 0; i < size; i++) {
boolean success= deleteDir(newFile(dir, children[i]));if (!success) {return false;
}
}
}
}if (dir == null) {return true;
}else{returndir.delete();
}
}//获取文件//Context.getExternalFilesDir() --> SDCard/Android/data/你的应用的包名/files///目录,一般放一些长时间保存的数据//Context.getExternalCacheDir() -->//SDCard/Android/data/你的应用包名/cache/目录,一般存放临时缓存数据
public static longgetFolderSize(File file) throws Exception {long size = 0;try{
File[] fileList=file.listFiles();int size2 = 0;if (fileList != null) {
size2=fileList.length;for (int i = 0; i < size2; i++) {//如果下面还有文件
if(fileList[i].isDirectory()) {
size= size +getFolderSize(fileList[i]);
}else{
size= size +fileList[i].length();
}
}
}
}catch(Exception e) {
e.printStackTrace();
}returnsize;
}/**
* 格式化单位
* 计算缓存的大小
* @param size
* @return*/
public static String getFormatSize(doublesize) {double kiloByte = size / 1024;if (kiloByte < 1) {//return size + "Byte";
return "0K";
}double megaByte = kiloByte / 1024;if (megaByte < 1) {
BigDecimal result1= newBigDecimal(Double.toString(kiloByte));return result1.setScale(2, BigDecimal.ROUND_HALF_UP)
.toPlainString()+ "KB";
}double gigaByte = megaByte / 1024;if (gigaByte < 1) {
BigDecimal result2= newBigDecimal(Double.toString(megaByte));return result2.setScale(2, BigDecimal.ROUND_HALF_UP)
.toPlainString()+ "MB";
}double teraBytes = gigaByte / 1024;if (teraBytes < 1) {
BigDecimal result3= newBigDecimal(Double.toString(gigaByte));return result3.setScale(2, BigDecimal.ROUND_HALF_UP)
.toPlainString()+ "GB";
}
BigDecimal result4= newBigDecimal(teraBytes);return result4.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString()+ "TB";
}
}