注意:本篇文章是本人阅读相关文章所写下的总结,方便以后查阅,所有内容非原创,侵权删。
文章来自:
Android文件存储路径getFilesDir()与getExternalFilesDir的区别
目录
1.文件缓存到哪里?(会随着应用的删除而删除)
2.文件缓存到哪里?(不会随着应用的删除而删除)
1.文件缓存到哪里?(会随着应用的删除而删除)
当需要缓存文件时,不要直接缓存到SD卡(/mnt/sdcard/ )下,
即通过File sdCard = Environment.getExternalStorageDirectory(); 获取SD卡根目录,然后自定义文件/文件名进行文件存储。
原因:
1.当手机安装了大量app的时候,SD卡会迅速变得杂乱不堪。
2.API6.0之后,根目录文件存储需要用户授权,即使在清单文件配置了存储权限,用户不授权也是写不进去的。
应该这样缓存:
1.当手机有SD卡或自身分配了外部存储空间时
存在SD卡/mnt/sdcard/的子目录下
//缓存在外部存储中的
/Android/data/< package name >/files/… (该路径通常挂载在/mnt/sdcard/下)
//外部存储路径调用方法是:
//这个方法获得的文件存储路径适用于6.0以后系统,主要AndroidManifest.xml配置读写权限了,就不需要用户再授权了.
context.getExternalFilesDir(dir).getAbsolutePath() //通过context调用,参数dir为自自定义文件夹.
2.如果有些手机没有SD卡或者系统自身没有分配外部存储空间
则用内部存储
//内部存储的路径是:
/data/data/< package name>/files/…(该路径挂载在在手机自身存储目录)
//内部存储路径调用方法是:
context().getFilesDir().getAbsolutePath() //通过context调用
实际开发具体代码实现:
private String getFilePath(Context context,String dir) {
String dirFilePath = "";
if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
//SD卡有用
dirFilePath = context.getExternalFilesDir(dir).getAbsolutePath();
}else{
//SD卡没有用
dirFilePath = context.getFilesDir()+ File.separator+dir;
}
File file = new File(dirFilePath);
if(!file.exists()){
file.mkdirs();
}
return dirFilePath;
}
2.文件缓存到哪里?(不会随着应用的删除而删除)
则存在SD卡上自定义文件/目录
即通过File sdCard = Environment.getExternalStorageDirectory(); 获取SD卡根目录,然后自定义文件/文件名进行文件存储。