问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Android 文件存储位置梳理

创作时间:
作者:
@小白创作中心

Android 文件存储位置梳理

引用
CSDN
1.
https://blog.csdn.net/ArisKing/article/details/88263183

在Android开发中,文件存储是一个核心功能,涉及到用户数据的持久化和应用的性能优化。本文将详细介绍Android设备中的三种主要存储位置:内部存储、扩展存储和公共存储,并说明如何通过相应的API进行文件操作。

所有的安卓设备都有外部存储和内部存储,这两个名称来源于安卓的早期设备,那个时候的设备内部存储确实是固定的,而外部存储确实是可以像U盘一样移动的。

在后来的设备中,很多中高端机器都将自己的机身存储扩展到了8G以上,他们将存储在概念上分成了"内部internal" 和"外部external" 两部分,但其实都在手机内部。所以不管安卓手机是否有可移动的sdcard,他们总是有外部存储和内部存储。最关键的是,我们都是通过相同的api来访问可移动的sdcard或者手机自带的存储(外部存储)。

外部存储虽然概念上有点复杂,但也很好区分,你把手机连接电脑,能被电脑识别的部分就一定是外部存储。

从逻辑意义上来说,

data

目录就是就是就是手机的内部存储,而

mnt

或者

storage

目录下的

sdcard

目录就是外部存储。如果是手机内存的外部存储被称为机身外部存储,外置的SD卡则称之为外部存储。

Android下有哪些文件目录

在Android系统中,根据调用的系统API接口,有3种目录可以给我们写入文件:

一,应用私有存储(内部存储)

1,获取方式:

Context.getFileDir():

获取内置存储下的文件目录,可以用来保存不能公开给其他应用的一些敏感数据如用户个人信息。

Context.getCacheDir():

获取内置存储下的缓存目录,可以用来保存一些缓存文件如图片,当内置存储的空间不足时将系统自动被清除。

2,绝对路径:

Context.getFileDir():

/data/data/应用包名/files/

[6.0以下]

/data/user/0/应用包名/files/

[6.0以上]

=[Cocos2dx下的getWritablePath()]

Context.getCacheDir():

/data/data/应用包名/cache/

[6.0以下]

/data/user/0/应用包名/cache/

[6.0以上]

3,写权限:不需要申请。

这是手机的内置存储,没有root的过的手机是无法用文件管理器之类的工具查看的。而且这些数据也会随着用户卸载App而被一起删除。这两个目录其实就对应着

设置->应用->你的App->存储空间

下面的

清除数据

清楚缓存

,如下图所示。

二,应用扩展存储(内置的外部存储)

1,获取方式:


Context.getExternalFilesDir()

获取内置外部存储

上的文件目录。

Context.getExternalCacheDir()

获取内置外部存储上的缓存目录。

2,绝对路径:


Context.getExternalFilesDir()

SDCard/Android/data/应用包名/files/

Context.getExternalCacheDir()

SDCard/Android/data/应用包名/cache/

3,写权限:API < 19:需要申请;API >= 19:不需要申请。

"android.permission.WRITE_EXTERNAL_STORAGE";

"android.permission.READ_EXTERNAL_STORAGE"

Also starting in API level 19, this permission is not required to read/write files in your application-specific directories returned by getExternalFilesDir(String) and getExternalCacheDir().

Android 6.0以后系统,就不再需要用户授权了。

同上面一样的,这里的文件会随着App卸载而被删除,也可以由用户手动在设置界面里面清除。既然是SD卡上的目录,那么是可以被其他的应用读取到的,所以这个目录下,不应该存放用户的敏感信息。

清除缓存:删除缓存数据,即getCacheDir()与getExternalCacheDir()。

清除数据:删除所有数据,即getFilesDir()、getCacheDir()、getExternalFilesDir(null)、getExternalCacheDir()。

三,公共存储(SD卡外部存储)

1,获取方式:


Environment.getExternalStorageDirectory()

2,绝对路径:SDCard/你设置的文件夹名字/

3,写权限:需要申请。

如果我们的App需要存储一些公共的文件,甚至希望下载下来的文件即使在我们的App被删除之后,还可以被其他App使用,那么就可以使用这个目录。这个目录是始终需要申请SD写入权限的。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号