获取外部公有存储位置,在这下面建立的文件夹或文件,卸载APP不会被删除
-
Environment.getExternalStorageDirectory())
输出:/storage/emulated/0
对应目录:mnt/sdcard/
-
Environment.getExternalStoragePublicDirectory(Environment.DIRECOTRY_DOCUMENTS)
输出:/storage/emulated/0/Documents
对应目录:mnt/sdcard/Documents
-
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)
输出:/storage/emulated/0/DCIM
对应目录:mnt/sdcard/DCIM
说明:一般音视频文件就放在这个目录下面,手机自身拍照录像的文件也放在这个目录下。系统能自动扫描
下面是获取外部APP私有存储位置, 这个路径下文件都会在APP卸载时被清空
-
context.getExternalFilesDir(null)
输出:/storage/emulated/0/Android/data/com.fe.myapplication/files
对应目录:mnt/sdcard/Android/data/com.fe.myapplication/files -
context.getExternalFilesDir(Environment.DIRECTORY_DCIM)
输出:/storage/emulated/0/Android/data/com.fe.myapplication/files/DCIM
对应目录:mnt/sdcard/Android/data/com.fe.myapplication/files/DCIM最后一个目录是由系统自动生成。files 文件夹下文件在卸载APP时会被清空
Environment.DIRECTORY_DCIM --> DCIM
Environment.DIRECTORY_DOCUMENTS --> Documents
Environment.DIRECTORY_DOWNLOADS --> Download
-
context.getExternalCacheDir()
输出:/storage/emulated/0/Android/data/com.fe.myapplication/cache
对应目录:mnt/sdcard/Android/data/com.fe.application/cache
20210623更新
注:阅读公司项目代码,发现同事为在APP外部私有存储位置建立文件夹,直接调用
context.getExternalFilesDir(文件夹名)
前文中我以为函数参数只能是枚举常量 Environment.***, 疑惑这样操作能否生成想要的文件,尝试发现生成成功 mnt/sdcard/Android/data/com.fe.application/files/文件夹名。
因此,获取APP外部私有存储位置精确表述为:
context.getExternalFilesDir(null) 可得路径 mnt/sdcard/Android/data/com.fe.application/files, 而其中的String类型参数不为空时,系统将自动在 files 文件夹下建立名称为所提供参数的文件夹.
又因为私有存储位置不需要读写权限,所以可在 files 文件夹下建立任意文件。
下面是获取内部APP私有存储位置,这个路径下文件都会在APP卸载时被清空
APP创建时,会自动在 data/data/com.joyhonest.myapplication/ 下面创建 cache, code_cache, files 三个文件夹.
-
context.getCacheDir()
输出:/data/user/0/com.joyhonest.myapplication/cache
对应目录:data/data/com.fe.myapplication/cache -
context.getFilesDir()
输出:/data/user/0/com.joyhonest.myapplication/files
对应目录:data/data/com.fe.myapplication/files
//注意:全文中的外部存储并不一定是可移除的存储,现有手机都有容量非常大的不可移除的外部存储
//放置永久性文件时,放置在外部公有存储位置
//放置缓存文件时,优先放置在外部APP私有存储位置,外部不可用时再放到内部APP私有存储位置
//转载自:http://blog.csdn.net/a910626/article/details/51470866
public String getDiskCacheDir(Context context) {
String cachePath = null;
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
|| !Environment.isExternalStorageRemovable()) {
cachePath = context.getExternalCacheDir().getPath();
} else {
cachePath = context.getCacheDir().getPath();
}
return cachePath;
}
修改记录
1 20210623 更新外部APP私有存储位置处文件夹生成