Android手机上的存储空间可做如下划分:
内存:RAM
内部存储:内部ROM
外部存储:外部ROM和SDCard
打开Device File Explore可以看到手机的文件系统:
内部存储:
data目录对应了内部存储的路径,每安装 一个App,系统都会在 data/data 目录下以应用包名为名字自动创建与之对应的文件夹,这个文件夹用来存放 WebView 缓存,SharedPreferences 和数据库信息,卸载 App 时,对应的内容也会自动删除
优点:比较稳定,存储方便,操作简单,更加安全(可以控制访问权限)等优点
缺点:空间有限。
方法 | 路径 |
---|---|
Environment.getDataDirectory().getParentFile() | /(内存根目录) |
Environment.getDataDirectory() | /data |
Environment.getDownloadCacheDirectory() | /cache |
Environment.getRootDirectory() | /system |
私有目录:
方法 | 路径 |
---|---|
context.getFilesDir() | /data/user/0/packageName/files |
context.getCacheDir() | /data/user/0/packageName/cache |
外部存储:
外部存储对应的目录是mnt,store和sdcard目录
优点是存储空间大,无需担心数据清除问题,缺点不能稳定使用。
Environment .getExternalStorageDirectory()可以获取到外部存储,在不同的系统版本打印其路径,发现打印结果有所不同:
/sdcard/
/mnt/sdcard/
/storage/sdcard0/
/storage/emulated/legacy/ //这里的legacy是0,1,2...
公有目录:有9大类,比如DCIM、Download等系统为用户创建的文件夹
Environment.getExternalStoragePublicDirectory(String)方法可以获取公有目录
方法 | 路径 |
---|---|
DIRECTORY_ALARMS | /storage/sdcard0/Alarms |
DIRECTORY_DCIM | /storage/sdcard0/DCIM |
DIRECTORY_DOWNLOADS | /storage/sdcard0/Download |
DIRECTORY_MOVIES | /storage/sdcard0/Movies |
DIRECTORY_MUSIC | /storage/sdcard0/Music |
DIRECTORY_NOTIFICATIONS | /storage/sdcard0/Notifications |
DIRECTORY_PICTURES | /storage/sdcard0/Pictures |
DIRECTORY_PODCASTS | /storage/sdcard0/Podcasts |
DIRECTORY_RINGTONES | /storage/sdcard0/Ringtones |
私有目录: 即Android文件夹/storage/sdcard/Android/,其中的data文件夹包含了许多包名组成的文件夹。
context.getExternalCacheDir()方法可以获取到/storage/emulated/0/Android/data/com.example.mtest/cache路径就是一个私有目录
可以看到在sd卡根目录中经常会出现数字0,这里的数字表示userId的意思;
Environment.getExternalStorageState()可以获取外部存储状态,mounted表示外部存储已安装
Android Q
Android Q中通过Context.getExternalFilesDir()获取私有目录