内部存储
内部存储描述&注意事项
- 内部存储是只有当前应用可以访问到的存储方式,SP有能被外部访问的模式;
- 应用卸载后内部存储内容都将被删除;
- 包括
sharedPreferences
,SQLite
;
内部存储的路径
- /data/app: 存放着所有安装的app的apk文件
- /data/data/包名/shared_prefs APP的SP信息
- /data/data/包名/databases APP的数据库信息
- /data/data/包名/files APP的文件信息
- /data/data/包名/cache APP的缓存信息
注意: 没有root的手机不能打开内部存储的文件夹;
内部存储使用方式
内部存储的文件存储位置: context.getFileDir();
内部存储的缓存存储位置: context.getCacheDir();
外部存储
总结概要:
- 内部存储和外部存储都存在路径让其他应用读取;
- 外部存储文件存储都是要精确到文件夹的;
- 外部存储存储在外部sdCard中,使用上下文得到的是私有的,也是常清理的位置;
外部存储包括私有目录和公有目录.
私有目录有包名存在.
公有目录使用
Environment
获取
外部存储存储权限如下:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
外部存储存储路径和使用方式
公有目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18Environment.getRootDirectory()
-> /system
// Android的根目录
Environment.getDataDirectory()
-> /data
// 用户数据目录
Environment.getDownloadCacheDirectory()
-> /data/cache
// 下载缓存目录
Environment.getExternalStorageDirectory()
-> /storage/emulated/0
// 主要的外部存储目录 需要使用Environment.getExternalStorageState()判断状态.
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_ALARMS)
-> /storage/emulated/0/Alarms私有目录,清理数据和缓存的路径,应用被卸载时清理,也可自己手动清理
1
2
3
4
5context.getExternalCacheDir()
->/storage/emulated/0/Android/data/packageName/cache
context.getExternalFilesDir(Environment.DIRECTORY_ALARMS)
->/storage/emulated/0/Android/data/packageName/files/Alarms
总结:
- 内部存储和外部存储都存在路径让其他应用读取;
- 内部存储/data/user/0/包名/ 或 data/data/包名/
- 外部存储文件存储都是要精确到文件夹的;
- 外部存储存储在外部sdCard中,使用上下文得到的是私有的,也是常清理的位置;
外部存储路径
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21showLog("Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_ALARMS)->"+ Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_ALARMS).getAbsolutePath());
showLog("Environment.getDownloadCacheDirectory()->"+Environment.getDownloadCacheDirectory().getAbsolutePath());
showLog("Environment.getDataDirectory()->"+Environment.getDataDirectory().getAbsolutePath());
showLog("Environment.getExternalStorageDirectory()->"+Environment.getExternalStorageDirectory().getAbsolutePath());
showLog("Environment.getRootDirectory()->"+ Environment.getRootDirectory().getAbsolutePath());
showLog("getExternalCacheDir()->"+getExternalCacheDir().getAbsolutePath());
showLog("getExternalFilesDir(Environment.DIRECTORY_ALARMS)->"+getExternalFilesDir(Environment.DIRECTORY_ALARMS).getAbsolutePath());
showLog("内部存储->"+getCacheDir().getAbsolutePath());
showLog("内部存储->"+getFilesDir().getAbsolutePath());
Environment.getExternalStorageState();
//小米6 环境下
W: Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_ALARMS)->/storage/emulated/0/Alarms
W: Environment.getDownloadCacheDirectory()->/data/cache
W: Environment.getDataDirectory()->/data
W: Environment.getExternalStorageDirectory()->/storage/emulated/0
W: Environment.getRootDirectory()->/system
W: getExternalCacheDir()->/storage/emulated/0/Android/data/com.billliao.fentu/cache
W: getExternalFilesDir(Environment.DIRECTORY_ALARMS)->/storage/emulated/0/Android/data/com.billliao.fentu/files/Alarms
W: 内部存储->/data/user/0/com.billliao.fentu/cache
W: 内部存储->/data/user/0/com.billliao.fentu/files