能否通过直接文件路径访问应用专属存储空间中的文件?
问题解答
1. 能否通过保存的绝对路径正常访问文件
- 绝大多数常规场景下可以正常访问:
安卓4.4及以上系统中,getExternalFilesDir()返回的是应用专属外部存储空间路径,你的应用本身对该目录有完全读写权限,不需要申请额外存储权限,只要应用未被卸载、存储介质正常挂载,直接通过new File(savedAbsolutePath)就能正常访问对应文件。 - 以下特殊场景会访问失败:
- 应用被卸载后重装:卸载时系统会自动删除应用专属目录下的所有内容,即便路径不变对应文件也已不存在;如果包名变更路径也会同步变更
- 应用在内部存储和SD卡之间迁移时,专属目录的根路径会发生变化
- 系统升级、多用户切换、可插拔SD卡挂载状态变更等场景,也可能导致旧绝对路径失效
2. 该做法是否属于最佳实践
不属于最佳实践,存在明显的兼容性和稳定性风险,更推荐的实现方案如下:
不要存储完整绝对路径,仅存储文件的相对标识(比如你场景里的文件名filename),每次需要访问文件时,主动调用getExternalFilesDir(Environment.DIRECTORY_PICTURES)获取当前应用专属目录的最新路径,再和存储的文件名拼接得到完整路径。
示例代码:
// 仅存储文件名到数据库 saveToDb("filename"); // 读取文件时动态拼接最新路径 File picDir = getApplicationContext().getExternalFilesDir(Environment.DIRECTORY_PICTURES); File file = new File(picDir, savedFileName);
这种实现方案不管应用专属根路径怎么变动,都能正确定位到目标文件,兼容性和稳定性更强。
内容的提问来源于stack exchange,提问作者Divij Gupta
相关产品推荐
相关产品推荐

