请教一个 android 的获取 internal Storage 的路径的问题?

2019-03-27 15:40:43 +08:00
 v2byy

在 android 中调用 getFilesDir() 来获取一个文件的绝对路径,发现这个函数返回的值不太一样。

  1. 有的时候返回 /data/data/[package-name]/files

  2. 有的时候返回 /data/user/0/[package-name]/files

我通过 adb shell 可以看到文件在 /data/data/[package-name]/files 里,但是有的时候因为返回的路径是第二种情况,导致使用 FileInputStream 打开时,抛出 FileNotFoundException.

查阅了一些资料,发现 /data/user/0 是 /data/data 的一个软链接。在 stackoverflow 上找到一个类似的问题,但是没人回答:

stackoverflow

请问下怎么搞?

8878 次点击
所在节点    Android
12 条回复
jackleeforce3615
2019-03-27 16:31:54 +08:00
Environment.getExternalStorageDirectory().getPath()
v2byy
2019-03-27 16:56:52 +08:00
@jackleeforce3615 这个需要 WRITE_EXTERNAL_STORAGE 权限吧,读写 app internal storage 不需要额外的权限啊
lecoo
2019-03-27 17:09:19 +08:00
可以规避下,先按照第一种路径去处理,catch FileNotFoundException 异常, 在 catch 的括号里再按照第二种路径去处理。
lowett
2019-03-27 17:25:17 +08:00
什么手机 是不是与机型有关
Lin0936
2019-03-27 17:30:44 +08:00
你是什么机型?我刚试了手上的测试机 Nexus5 和 XperiaZ5,都是 /data/data/[package-name]/files
bccoder
2019-03-27 17:33:37 +08:00
跟账户有关?
v2byy
2019-03-27 18:07:00 +08:00
@Lin0936
@lowett

使用的模拟器,换了物理机,没出现这个问题。
xuhaoyangx
2019-03-27 18:14:20 +08:00
@v2byy #7
xuhaoyangx
2019-03-27 18:15:47 +08:00
如果 getFilesDir 会出现这种异常,考虑别直接获取 files 文件夹路径。我觉得这是虚拟机的问题
skylancer
2019-03-27 21:45:23 +08:00
/data/user/(uid)
skylancer
2019-03-27 21:45:54 +08:00
/data/user/(uid), 请务必考虑多用户的问题,尤其是利用多用户的多开比如 MIUI 什么的
lowett
2019-03-27 22:29:02 +08:00
@Lin0936 华为手 data/user/0

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/549158

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX