您的位置:首页 > 移动开发 > Android开发

android 读取,清除缓存通用于所有手机 解决空指针

2016-04-12 18:38 441 查看
之前公司项目需要实现读取本地apk缓存和清除apk缓存的功能,果断百度之后就加到项目中,在三星 note,galaxy 华为 等等基本没有问题。但是在小米手机测试时当本地有缓存时 可以清除成功,当本地缓存为0,或者已经清除一次之后再次点击清除程序就会崩溃,查看日志报空指针错误。 想了半天没有找到好的避免办法,最后想到了抛异常,改进代码如下。目前测试没有任何问题。

首先贴上关键代码

//利用递归读取所以文件夹下的文件

public static long getFileSize(File f) // 取得文件夹大小
{
long size = 0;
try {
if(f.listFiles()!=null){
File flist[] = f.listFiles();
for (int i = 0; i < flist.length; i++) {
if (flist[i].isDirectory()) {
size = size + getFileSize(flist[i]);
} else {
size = size + flist[i].length();
}
}
}
} catch (Exception e) {
// TODO: handle exception
}

return size;
}

public static String FormetFileSize(long fileS) {// 转换文件大小,显示给用户
if(fileS == 0){
return "0KB";
}
DecimalFormat df = new DecimalFormat("#.00");
String fileSizeString = "";
if (fileS < 1024) {
fileSizeString = df.format((double) fileS) + "B";
} else if (fileS < 1048576) {
fileSizeString = df.format((double) fileS / 1024) + "K";
} else if (fileS < 1073741824) {
fileSizeString = df.format((double) fileS / 1048576) + "M";
} else {
fileSizeString = df.format((double) fileS / 1073741824) + "G";
}
return fileSizeString;
}
public static boolean trimCache(Context context) {
try {
File dir = context.getCacheDir();
if (dir != null && dir.isDirectory() && dir.listFiles().length != 0) {
return deleteDir(dir);
} else {
return false;
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
}

public static boolean trimExternalCache(Context context) {
try {
File dir = context.getExternalCacheDir();
if (dir != null && dir.isDirectory() && dir.listFiles().length != 0) {
return deleteDir(dir);
} else {
return false;
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
}


**获取本地缓存文件大小**
**String cacheFileSizeString = Utils.FormetFileSize(getFileSize(getCacheDir())
+ getFileSize(getExternalCacheDir()));**

**清楚本地缓存文件
trimCache(getApplicationContext());
trimExternalCache(getApplicationContext());**

本人才疏学浅,如果发现错误或者有更好的建议希望各位不吝赐教。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息