在 android 中调用 getFilesDir() 来获取一个文件的绝对路径,发现这个函数返回的值不太一样。
有的时候返回 /data/data/[package-name]/files
有的时候返回 /data/user/0/[package-name]/files
我通过 adb shell 可以看到文件在 /data/data/[package-name]/files 里,但是有的时候因为返回的路径是第二种情况,导致使用 FileInputStream 打开时,抛出 FileNotFoundException.
查阅了一些资料,发现 /data/user/0 是 /data/data 的一个软链接。在 stackoverflow 上找到一个类似的问题,但是没人回答:
请问下怎么搞?
1
jackleeforce3615 2019-03-27 16:31:54 +08:00
Environment.getExternalStorageDirectory().getPath()
|
2
v2byy OP @jackleeforce3615 这个需要 WRITE_EXTERNAL_STORAGE 权限吧,读写 app internal storage 不需要额外的权限啊
|
3
lecoo 2019-03-27 17:09:19 +08:00
可以规避下,先按照第一种路径去处理,catch FileNotFoundException 异常, 在 catch 的括号里再按照第二种路径去处理。
|
4
lowett 2019-03-27 17:25:17 +08:00 via iPhone
什么手机 是不是与机型有关
|
5
Lin0936 2019-03-27 17:30:44 +08:00
你是什么机型?我刚试了手上的测试机 Nexus5 和 XperiaZ5,都是 /data/data/[package-name]/files
|
6
bccoder 2019-03-27 17:33:37 +08:00 via Android
跟账户有关?
|
8
xuhaoyangx 2019-03-27 18:14:20 +08:00
@v2byy #7
|
9
xuhaoyangx 2019-03-27 18:15:47 +08:00
如果 getFilesDir 会出现这种异常,考虑别直接获取 files 文件夹路径。我觉得这是虚拟机的问题
|
10
skylancer 2019-03-27 21:45:23 +08:00
/data/user/(uid)
|
11
skylancer 2019-03-27 21:45:54 +08:00
/data/user/(uid), 请务必考虑多用户的问题,尤其是利用多用户的多开比如 MIUI 什么的
|