内部存储和外部存储
在Android4.4以前,内部存储(Internal Storage)就是指手机机身存储,而外部存储(External Storage)则指外置SD卡。
而在Android4.4及以后,在没有外置SD卡的情况下机身存储分为了内部存储(Internal Storage)和外部存储(External Storage);如果加上外置SD卡则外置SD卡和机身存储的外部存储都算作外部存储(External Storage)
//在Android4.4及以后提供了getExternalFilesDirs方法来获取所有的外置存储
File[] files = getExternalFilesDirs("");
Android系统中的文件夹
data目录
/data
目录就是所谓的内部存储(ROM),但是当手机没有root的时候不能打开此文件夹。
- data/app/
存放所有用户安装的apk文件,不包括系统默认应用文件
- data/data/包名/
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jv9LwiLm-1661177297780)(https://p1-jj.byteimg.com/tos-cn-i-t2oaga2asx/gold-user-assets/2020/3/29/171257f84ba6265b~tplv-t2oaga2asx-image.image)]
每个应用的数据都存放在以包名为命名的文件夹下,如图:
- cache:缓存目录
- databases:数据库目录
- files:文件存储目录
- shared_prefs:SharedPreferences文件存储目录
- /data/misc/
这里存放着大部分的WIFI、VPN信息。
- /data/user/0/
/data/data
目录实际上软连接到/data/user/0
目录,相当于/data/data
目录是一个指针指向
/data/user/0
目录.
在Android4.2之后,Android推出了一个“多用户”的功能特征,意味着一台设备可能被多个人同时应用,因此需要将每个人的数据、应用、个性配置分开。为了区别数据就用数字来区别多用户,这里的0就是指第一个用户
软连接可用看Linux软连接和硬链接
system
Android系统文件,需要root权限
- /system/app/
这里存放一些系统的app
- /system/fonts/ 目录
这里存放系统的字体文件
- /system/lib/ 目录
这里存放的几乎是所有的共享库(.so)文件。
- /system/media/ 目录
这里用来保存系统铃声、系统提示音。
storage
storage
目录就是外部存储,包括了机身内部存储和外置SD卡。注意不同的版本存储数据的位置不同,例如:
Androidr4.4.2 带SD卡(没有Android4.4的手机,数据来自网络)
位置 | 路径 | 获取路径的api |
---|---|---|
机身外部存储 | /storage/emulated/0/Android/data/packname/files | getExternalStorageDirectory() |
外置SD卡 | /storage/sdcard1 | getExternalFilesDirs() |
Android 8 小米
位置 | 路径 | 获取路径的api |
---|---|---|
机身外部存储 | /storage/emulated/0/Android/data/packname/files | getExternalStorageDirectory() |
外置SD卡 | /storage/sd_name | getExternalFilesDirs() |
sdcard
详情看Android内、外存储易混淆点剖析(/mnt/sdcard、/storage/sdcard0、/storage/emulated/0等区别)
获取Andorid中的目录
以下api返回的值均为Android O下返回的值
内部储存目录
//创建/data/user/0/packagename/files文件夹,随着应用位置的改变,位置可能改变
context.getFilesDir();
//创建/data/user/0/packagename/cache文件夹当需要空间时,
//系统会自动删除其中的文件(先删除存在最长时间的)
context.getCacheDir(