V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
v2byy
V2EX  ›  Android

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

  •  
  •   v2byy · 2019-03-27 15:40:43 +08:00 · 9275 次点击
    这是一个创建于 2093 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在 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

    请问下怎么搞?

    第 1 条附言  ·  2019-03-27 18:05:13 +08:00
    用的模拟器,用物理机测试无问题
    12 条回复    2019-03-27 22:29:02 +08:00
    jackleeforce3615
        1
    jackleeforce3615  
       2019-03-27 16:31:54 +08:00
    Environment.getExternalStorageDirectory().getPath()
    v2byy
        2
    v2byy  
    OP
       2019-03-27 16:56:52 +08:00
    @jackleeforce3615 这个需要 WRITE_EXTERNAL_STORAGE 权限吧,读写 app internal storage 不需要额外的权限啊
    lecoo
        3
    lecoo  
       2019-03-27 17:09:19 +08:00
    可以规避下,先按照第一种路径去处理,catch FileNotFoundException 异常, 在 catch 的括号里再按照第二种路径去处理。
    lowett
        4
    lowett  
       2019-03-27 17:25:17 +08:00 via iPhone
    什么手机 是不是与机型有关
    Lin0936
        5
    Lin0936  
       2019-03-27 17:30:44 +08:00
    你是什么机型?我刚试了手上的测试机 Nexus5 和 XperiaZ5,都是 /data/data/[package-name]/files
    bccoder
        6
    bccoder  
       2019-03-27 17:33:37 +08:00 via Android
    跟账户有关?
    v2byy
        7
    v2byy  
    OP
       2019-03-27 18:07:00 +08:00
    @Lin0936
    @lowett

    使用的模拟器,换了物理机,没出现这个问题。
    xuhaoyangx
        8
    xuhaoyangx  
       2019-03-27 18:14:20 +08:00
    @v2byy #7
    xuhaoyangx
        9
    xuhaoyangx  
       2019-03-27 18:15:47 +08:00
    如果 getFilesDir 会出现这种异常,考虑别直接获取 files 文件夹路径。我觉得这是虚拟机的问题
    skylancer
        10
    skylancer  
       2019-03-27 21:45:23 +08:00
    /data/user/(uid)
    skylancer
        11
    skylancer  
       2019-03-27 21:45:54 +08:00
    /data/user/(uid), 请务必考虑多用户的问题,尤其是利用多用户的多开比如 MIUI 什么的
    lowett
        12
    lowett  
       2019-03-27 22:29:02 +08:00 via iPhone
    @Lin0936 华为手 data/user/0
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1029 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 19:25 · PVG 03:25 · LAX 11:25 · JFK 14:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.