【问题标题】:My app doesn't see an internal file我的应用没有看到内部文件
【发布时间】:2018-06-06 10:38:16
【问题描述】:

我希望我的应用程序检查文件的最后修改日期并读取它,但它的行为就像该文件不存在,即使我知道它在那里。这是我的代码:

File f = new File("data/system/dropbox/data_app_crash@1528276030506.txt");
    if(f.exists() && !f.isDirectory()) {
        System.out.println("I see you");
      }
    System.out.println("Before Format : " + f.lastModified());

我的清单中有 READ_INTERNAL_STORAGE 和 READ_LOGS 权限,并且还通过 adb (adb shell pm grant package android.permission) 授予了它们,我也有 root 访问权限。

怎么办?

【问题讨论】:

  • 文件名中是否缺少前导“/”?
  • 无论有没有它,我都会得到相同的结果。我已经测试过,我可以在不使用前导 / 的情况下从同一设备查看其他文件,因此似乎没有必要。

标签: android permissions system crash-reports file-read


【解决方案1】:

您应该将代码更改为以下内容并使用getFileStreamPath 方法

     File file = context.getFileStreamPath(filename);
    if(file == null || !file.exists()) {
         // Do something 
     }else{
        // Do something else 
     }

或者openFileInput方法

try {
  FileInputStream fis = openFileInput(String filename);
  // ... do something
try {
    fis.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
} catch (FileNotFoundException e) { 
  e.printStackTrace();
}

【讨论】:

  • 那些给了我一个“java.lang.IllegalArgumentException:包含路径分隔符”。我查看了如何修复它并看到使用“FileInputStream fis = new FileInputStream (new File("/data/system/dropbox/data_app_crash@1528276030506.txt"));”的建议但这也不起作用,我收到权限被拒绝错误。
  • 实际上“java.lang.IllegalArgumentException:包含路径分隔符”表示该文件已找到并且无法在应用程序的私有数据区域或任何其他子目录中打开,所以我的问题是你确定关于根访问?或者文件路径错误您可以尝试使用 // 而不是 / 吗?但我认为你没有权限这是你的问题
  • 也许你是对的。不幸的是,我现在无法测试它。明天我就可以了。
  • 好的,更新一下:对我来说,要授予应用程序 root 权限,它必须首先请求它,但是这段代码不会触发这样的请求,它只是失败了。我在应用程序中有一些其他代码确实要求 root 访问权限,我授予它,但我仍然收到相同的文件读取错误,即使它也应该获得 root 访问权限。我还使用终端向所有人授予了对该文件的读写权限,但我的应用程序仍然无法读取它:(我已经检查了多次,它确实存在于那个位置。
  • “//”而不是“/”同样的问题呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-19
  • 1970-01-01
  • 2013-09-11
  • 1970-01-01
  • 2011-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多