admin管理员组

文章数量:1558098

只要是需要进行联网获取数据的APP,那么不管是版本更新,还是图片缓存,都会在本地产生缓存文件。那么,这些缓存文件到底放在什地方合适呢?系统有没有给我们提供建议的缓存位置呢?不同的缓存位置有什么不同呢?今天这篇文章就是主要来说明这个问题的。

首先,我们要知道,在Android手机里面,缓存的位置分为两类,一类是Internal Storage,即内部存储,另外一类是External Storage,即外部存储。比较老的手机,有一个手机内部存储,还有一个SD卡存储,就是分别对应这两种存储位置,因为以前的SD卡是可以扩展的,即可拆卸的,所以可以用是否可拆卸作为内外存储的分类标准。但是现在最新的设备,比如小米、锤子、华为等,都取消了可拆卸的SD卡,直接与机身焊接在一起,分为16G、32G版本,所以现在内外存储的分类不再以是否可拆卸作为标准,而是以下面的几方面作为新的标准:

内部存储:

总是可用的

这里的文件默认是只能被你的app所访问的。

当用户卸载你的app的时候,系统会把internal里面的相关文件都清除干净。

Internal是在你想确保不被用户与其他app所访问的最佳存储区域。

外部存储:

并不总是可用的,因为用户可以选择把这部分作为USB存储模式,这样就不可以访问了。

是大家都可以访问的,因此保存到这里的文件是失去访问控制权限的。

当用户卸载你的app时,系统仅仅会删除external根目录(getExternalFilesDir())下的相关文件。

External是在你不需要严格的访问权限并且你希望这些文件能够被其他app所共享或者是允许用户通过电脑访问时的最佳存储区域。

读取内部存储不需要权限,但是读取或者是写入外部存储需要权限,在现版本里面,读权限不进行声明,也可以实现读取,但是在以后版本可能会修改,所以请务必加上,如果应用需要写入权限,那么只声明写入权限即可,不需要再声明读取权限。

下面分别说明如何获取内外存储的文件位置和区别。

一.保存到内部存储的方式

1.getFileDir() 通过此方法可以获取到你的APP内部存储的文件,路径为/data/data/pacgage_name/files

我们直接上代码进行测试:

File file1 = new File(getFilesDir(), "getFilesDir.txt");

Log.d("TAG", "file1=" + file1.getAbsolutePath());

try {

OutputStream outputStream1 = new FileOutputStream(file1);

outputStream1.write("file".getBytes());

outputStream1.close();

} catch (Exception e) {

本文标签: 缓存文件看完你应该这篇文章