oynix

于无声处听惊雷,于无色处见繁花

Android存储文件路径汇总

总结下应用内可用的存储路径。

Context获取存储目录的方法比较多,比如File目录,Cache目录,大致上可以分为两类,一类是应用内私有,只有应用自身可以访问,其他应用不可以直接访问,对于用户也是不可见的,但可以通过FileProvider将文件分享出去;另一类是应用外私有,同样是应用自身可以访问,但是用户是可以看到的。它们的共同点是,不需要系统权限,同时,会随着应用卸载而被删除。若不想被删除,那么就需要存储到共有目录中,而访问共有目录,就需要申请系统权限了。

1. 应用内私有

1
2
3
4
5
Context.getCacheDir();
Context.getDataDir();
Context.getFilesDir();
Context.getCodeCacheDir();
Context.getDir(String name, int mode);

这几个目录,所有的机型大致都在这个目录下,其中package name就是应用的包名

1
/data/data/package_name/

其中,getDataDir指的就是该目录,其他的则会在该目录下创建文件夹,CacheDir对应cache目录,FilesDir对应files目录,CodeCache对应code_cache目录,而getDir则会创建新目录,名字就是第一个参数加上app前缀。

2. 应用外私有

1
2
3
4
Context.getExternalCacheDir();
Context.getExternalCacheDirs();
Context.getExternalFilesDir();
Context.getExternalFilesDirs();

这几个目录,基本在这,package name也是应用包名,因为位于storage下,所以,对于用户是可见的

1
/sdcard/Android/package_name/

或者,还有其他的目录映射,不同机型可能会有所差别

1
/storage/self/primary/Android/package_name/

3. 公有目录

1
Environment.getExternalStorageDirectory();

这个目录,对应的共有路径,访问这个目录,需要申请系统的读写外部存储的权限

1
2
/sdcard/
/storage/self/primary/

4. 总结

  • 应用私有的目录,在应用卸载时会被系统删除
  • 不同的ROM,路径可能会有差别,但是获取方式和使用原则是一样的
  • 要想把应用私有目录下的文件分享出去,参考FileProvider的使用
  • 共有目录需要权限,私有的不需要,所以若不是必要,存储在应用私有的目录即可,减少权限的申请
------------- (完) -------------
  • 本文作者: oynix
  • 本文链接: https://oynix.com/2022/05/d92796c6f991/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

欢迎关注我的其它发布渠道