Android存储目录
一、内部存储
定义:内部存储是位于系统磁盘中的一个独特位置,通常为/data/
目录。
特点:
只能被本应用访问,其他程序无法访问。
当用户卸载该应用时,这些文件也会随之被删除。
未root的手机无法直接查看此目录。
主要目录
/data/app
功能:存放已安装的应用程序APK文件及对应的OAT文件(优化后的机器码)。
示例:/data/app/com.example.app.apk
/data/data/包名
功能:每个应用私有的数据目录,包含以下子目录:
files
:通用存储区域,用于保存文件。
cache
:缓存数据,容易被系统清理以释放空间。
shared_prefs
:保存SharedPreferences数据。
databases
:保存应用使用的数据库文件。
示例:/data/data/com.example.app/databases/mydb.sqlite
/data/system
功能:存放系统的配置信息和注册表文件等重要数据。
示例:/data/system/build.prop
/data/anr
功能:当应用无响应时,系统自动生成ANR日志文件。
示例:/data/anr/traces.txt
获取方法
Context.getFilesDir()
:返回内部存储中的应用相关文件目录。
Context.getCacheDir()
:返回内部存储中的应用缓存目录。
Environment.getDataDirectory()
:返回整个内部存储的根目录。
二、外部存储
定义:外部存储通常指设备自带的公共存储区域,如/storage/emulated/0/
或/mnt/sdcard
。
特点:
可被多个应用访问,但需要适当的权限。
即使应用被卸载,数据仍然保留(除非手动删除)。
部分目录需要申请读写权限。
主要目录
/storage/emulated/0
功能:设备自带的公共存储区域。
子目录:
Android/data/包名
:应用私有数据目录。
DCIM
:相机拍摄的图片和视频。
Download
:下载的文件。
Movies
:电影文件。
Music
:音乐文件。
Pictures
:图片文件。
示例:/storage/emulated/0/Android/data/com.example.app/files/download/apk/hong.apk
/mnt/sdcard
功能:指向设备的公共外部存储区域,通常是/storage/emulated/0
的符号链接。
示例:/mnt/sdcard/Download/example.txt
获取方法
Environment.getExternalStorageDirectory()
:返回外部存储的根目录。
Context.getExternalFilesDir(null)
:返回外部存储中的应用相关文件目录。
Context.getExternalCacheDir()
:返回外部存储中的应用缓存目录。
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)
:获取特定类型的公共目录,如DCIM(相机照片)。
权限管理
读取权限:android.permission.READ_EXTERNAL_STORAGE
写入权限:android.permission.WRITE_EXTERNAL_STORAGE
注意:从Android 6.0(API级别23)开始,需要在运行时动态申请这些权限。
三、扩展外部存储
定义:扩展外部存储通常指的是通过SD卡或其他外置存储设备提供的额外存储空间。
特点:
可以自由访问,但需要检查SD卡的状态。
即使应用被卸载,数据仍然保留。
主要目录
/storage/extSdCard
功能:扩展SD卡的根目录。
子目录:与内部存储类似,分为Android/data/包名
等结构。
示例:/storage/extSdCard/Android/data/com.example.app/files/
获取方法
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS)
:获取扩展存储中的文档目录。
getExternalStorageState(Environment.MEDIA_MOUNTED)
:检查SD卡是否已安装并可读写。
权限管理
读取权限:android.permission.READ_EXTERNAL_STORAGE
写入权限:android.permission.WRITE_MEDIA_STORAGE
注意:同样需要动态申请权限。
四、归纳
Android存储机制分为内部存储和外部存储两大类,各自拥有不同的特性和用途,了解这些存储目录及其使用方法,对于开发高效的Android应用至关重要,内部存储主要用于存放应用专有的数据,而外部存储则更适合存放多媒体文件和其他公共数据,合理利用这些存储空间,可以提高应用的性能和用户体验。