安卓缓存文件

首先我们要弄清楚几个概念:

getCacheDir()----------------------->/data/data/<application package>/cache/
getFilesDir()----------------------->/data/data/<application package>/files/

一般来说,上面这两个目录是用户不可见的,属于应用内部,比如WebView等一些缓存就存放于getCacheDir()。

===============================我是分割线=====================

而下面这两个目录则是用户可见的,并且当你的应用被卸载之后,“SDCard/Android/data/你的应用的包名/”这个目录下所有文件都会被删除。而且下面二个目录分别对应 设置->应用->应用详情里面的”清除数据“与”清除缓存“选项(有些机型清除数据的时候也会清除缓存,也就是说,有些机型清除数据就直接删除“SDCard/Android/data/你的应用的包名/”这个目录了。),如果要保存下载的内容,就不要放在以下两个目录里。而安卓6.0以后,新特性导致Uri.from(file)不再奏效,我们也可以把Provider映射到“Android/data/包名/”目录下,对应代码里的”SDCard/Android/data/包名/目录。

getExternalFilesDir()--------------->SDCard/Android/data/包名/files/
getExternalCacheDir()--------------->SDCard/Android/data/包名/cache/

计算缓存(部分代码):

format = new DecimalFormat("######0.00");//保留两位小数
tv_cache = (TextView) findViewById(R.id.tv_cache);
tv_cache.setOnClickListener(this);
// 刚好,我们指定的缓存目录和安卓getExternalCacheDir()是同一个地方,如果我们在Constants里指定的缓存目录
// 是别的目录,则可能还要把那个目录算进去(如果是需要删除的缓存的话)。这里我们算一次就行了。
long externalCacheSize = FileTool.calculateCacheSize(getExternalCacheDir());
long internalCacheSize = FileTool.calculateCacheSize(getCacheDir());
double totalCacheSize = ((double)(externalCacheSize + internalCacheSize)) / 1024 / 1024;
tv_cache.setText(format.format(totalCacheSize) + "MB");
/**
* 计算缓存大小
* @param targetFile 目标文件夹
* @return 本应用的磁盘缓存大小(单位:bit)
*/
public static long calculateCacheSize(File targetFile) {
    long size = 0;
    File[] files = targetFile.listFiles();
    if (files != null) {
        for (File file : files) {
            if (file.isDirectory()) {
                size += calculateCacheSize(file);
            } else {
                size += file.length();
            }
        }
    }
    return size;
}

删除缓存:

FileTool.deletePacketsByDirectory(getExternalCacheDir());
FileTool.deletePacketsByDirectory(getCacheDir());
/**
 * 删除某文件夹下面所有的文件
 * 
 * @param rootFile 根目录
 */
public static boolean deletePacketsByDirectory(File rootFile) {
    File[] files = rootFile.listFiles();
    if (files != null) {
        for (File file : files) {
            if (file.isFile()) {
                // 是文件,直接删除
                if (!file.delete()) {
                    return false;
                }
            } else if (file.isDirectory()) {
                // 是目录,继续递归删除
                if (!deletePacketsByDirectory(file)) {
                    return false;
                }
            }
        }
    }

    return rootFile.delete();
}

附(Android获取默认路径):

Environment.getDataDirectory().getPath()--------------->/data
Environment.getDownloadCacheDirectory().getPath()------>/cache
Environment.getExternalStorageDirectory().getPath()---->/mnt/sdcard
Environment.getRootDirectory().getPath()--------------->/system
Context.getCacheDir().getPath() ----------------------->/data/data/包名/cache
Context.getExternalCacheDir().getPath()---------------->/mnt/sdcard/Android/data/包名/cache
Context.getFilesDir().getPath()------------------------>/data/data/包名/files
Context.getObbDir().getPath()-------------------------->/mnt/sdcard/Android/obb/包名
Context.getPackageName()------------------------------->包名
Context.getPackageCodePath()--------------------------->/data/app/包名-1.apk
Context.getPackageResourcePath()----------------------->/data/app/包名-1.apk
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值