在平时开发当中,我们可能会纠结什么文件该存储在哪个目录下面,要么是不确定放哪,要么是放多了以后放乱了。那就弄清楚哪些文件存哪里吧。
1.外部存储
外部存储目录在/storage/emulated/0/下:
外部存储根目录/storage/emulated/0/获取方式:
Environment.getExternalStorageDirectory()
外部存储子目录分为分为三部分:
第一部分:共享存储空间
也就是所有App共享的部分,比如相册、音乐、铃声、文档等。
1.媒体文件
2.文档和其它文件
第二部分:App外部私有目录
第三部分:其它目录
各个App在/sdcard/目录下创建的目录,用于各自存储文件。
读写共享存储空间方法
private void getImagePath(Context context) {
ContentResolver contentResolver = context.getContentResolver();
Cursor cursor = contentResolver.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null, null, null, null);
while(cursor.moveToNext()) {
String imagePath = cursor.getString(cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA));
}
}
读写App外部私有目录方法
- 目录为 /storage/emulated/0/Android/data/packagename/cache
(packagename为应用包名)
File cacheDir = context.getExternalCacheDir();
- 目录为 /storage/emulated/0/Android/data/packagename/files
File fileDir = context.getExternalFilesDir(null);
App卸载的时候,两者都会被清除。
2.内部存储(手机内部存储)
应用内部存储在目录data/data/packagename下,具体查看目录如下:
大致介绍一下以上目录作用:
部分目录获取方式:
- 目录为 /data
getDataDir()
- 应用缓存目录 /data/data/packagename/cache
getCacheDir()
- 应用文件目录 /data/data/packagename/files
getFilesDir()
总结:
getCacheDir和getFilesDir目录必须是root的手机在文件操作系统中才能看到。如果在应用程序中清空数据或者卸载应用,那这两个目录下的文件也将会被清空。
getExternalCacheDir()与getExternalFilesDir(null)直接在文件系统下Android/data/packagename能看到。如果应用卸载,该目录下的文件会被删除掉。
Environment.getExternalStorageDirectory()根目录下创建的文件不会因程序卸载被清除掉。
内部存储与外部存储里的App私有目录区别
1.属于App专属,App自身访问两者无需任何权限。
2.App卸载后,两者皆被删除。
3.两者目录下增加的文件最终会被统计到"设置->存储和缓存"里。