Android存储路径
先来看一张大图:

内部存储
Environment.getDataDirectory().getParentFile();也就是根目录,一般就是指/data/data目录下的数据,需要root之后可以看见
- /data/app
 
该文件存放着系统中安装的第三方应用apk
Android的应用安装就是将应用安装包拷贝到/data/app目录下面,每个包本质是一个zip压缩文件。为了提升启动效率,Android会将解压的dex提取出来,缓存在/data/dalvik-cache目录下
| api | 路径 | 
|---|---|
| getDataDirectory() | /data | 
| getDownloadCacheDirectory() | /cache | 
| getRootDirectory() | /system | 
- /data/data
 
该文件夹存放存储包==私有数据==,对于设备中每一个安装的App,系统都会在内部存储空间的 data/data 目录下以应用包名为名字自动创建与之对应的文件夹。用户卸载 App 时,系统自动删除data/data目录下对应包名的文件夹及其内容。该目录下又把存储内容进行了分类:
| 地址 | 说明 | api | 
|---|---|---|
| data/data/包名/cache | 存放缓存信息 | context.getCacheDir() | 
| data/data/包名/database | APP数据库信息 | context.getDataDir() / context.getDatabasePath(name) | 
| data/data/包名/files | 存放APP的文件信息 | context.getFilesDir() | 
外部存储
每个兼容 Android 的设备都支持可用于保存文件的共享“外部存储”。 该存储可能是可移除的存储介质(例如 SD 卡)或内部(不可移除)存储。 保存到外部存储的文件是全局可读取文件,而且,在计算机上启用 USB 大容量存储以传输文件后,可由用户修改这些文件。

- 获取外部存储路径及状态
 
Environment.getExternalStorageState()
Environment.getExternalStorageDirectory()
- 公共目录
 
Android在外部存储上提供了十个公共目录来存储对应的文件,通过api:Environment.getExternalStoragePublicDirectory(type)来访问
| 名称 | 地址 | 
|---|---|
| DIRECTORY_MUSIC | /storage/emulated/0/Music | 
| DIRECTORY_PODCASTS | /storage/emulated/0/Podcasts | 
| DIRECTORY_RINGTONES | /storage/emulated/0/Ringtones | 
| DIRECTORY_ALARMS | /storage/emulated/0/Alarms | 
| DIRECTORY_NOTIFICATIONS | /storage/emulated/0/Notifications | 
| DIRECTORY_PICTURES | /storage/emulated/0/Pictures | 
| DIRECTORY_MOVIES | /storage/emulated/0/Movies | 
| DIRECTORY_DOWNLOADS | /storage/emulated/0/Downloads | 
| DIRECTORY_DCIM | /storage/emulated/0/Dcim | 
| DIRECTORY_DOCUMENTS | /storage/emulated/0/Documents | 
3. 私有目录
Android2.2 引入了基于扩展存储器的应用缓存目录,该目录指向大容量的扩展存储器。==与应用的内存私有目录一样,缓存目录会随着应用的卸载一并删除。==
==和内部存储一样,会在 SD 卡的 Android/data ++目录下生成对应包名的文件夹++==
| 地址 | api | 
|---|---|
| /storage/emulated/0/Android/data/应用包名/files | context.getExternalFilesDir(type) | 
| /storage/emulated/0/Android/data/应用包名/cache | context.getExternalCacheDir() | 
| /storage/emulated/0/Android/obb/应用包名 | context.getObbDir() | 
Android其它目录
/system/app 和 /data/app 的区别
- /data/app 里软件权限没全开,/system/app 里的软件获取了所有权限
 - /data/app 可以应用卸载,/system/app 只能 root 后删除
 - /data/app 文件夹大小随便,/system/app 文件夹有大小限制
 - 卸载/system/app 目录下的文件并不会增加系统空间,即可用 ROM 空间