在Android应用程序中的数据文件夹中读写

时间:2015-03-22 17:15:42

标签: android permissions root

我已创建此方法来读取文件:

@TargetApi(19)
public String getContentFile(String path) throws FileNotFoundException {

    BufferedReader br = new BufferedReader(new FileReader(path));

    try {
        Toast.makeText(MainActivity.this, "entrato", Toast.LENGTH_SHORT).show();
        StringBuilder sb = new StringBuilder();
        String line = br.readLine();

        while (line != null) {
            sb.append(line);
            sb.append(System.lineSeparator());
            line = br.readLine();
        }

        String everything = sb.toString();
        br.close();
        return everything;
    } catch (Exception e) {
        return "error";

    }

我在MainActivity中调用它,此代码适用于存储文件夹中的文件但不适用于数据/数据文件夹中的文件,我该如何更改? Tha app适用于root设备,我的问题是:如何在其他文件夹中访问? 例外说:开放失败:EACCES(权限被拒绝) 所以我改变了文件权限,但是它有效,但是如何暂时更改权限?

1 个答案:

答案 0 :(得分:1)

您的应用只能访问您自己的目录,即/data/data/your.package.name。

编辑:现在很明显OP正在尝试创建一个应用程序来访问根设备上自己的数据目录之外的文件。这使得这个问题完全不同。据我所知,不可能以root身份直接创建运行应用。你可以做的是运行su作为shell命令,然后运行你需要以root身份运行的任何shell命令。有几篇关于如何执行此操作的帖子,例如ANDROID: How to gain root access in an Android application?

这意味着您可能必须使用shell命令执行所有root访问操作,而不是使用普通的Android API:s。但是,如果您只需访问自己数据目录之外的某个文件,也许可以通过在rooted shell中使用chownchmod等来更改文件的权限来实现此目的正在尝试阅读以便您的应用程序的UID可以访问它(每个应用程序都会自动分配一个唯一的uid,例如“u0_a42”)。然后,您应该能够使用普通的Java文件操作来访问它。

也许您甚至不需要将文件的拥有用户实际更改为您的应用UID,但可以使用您的应用已经属于的某些现有 ,例如控制访问SD卡的人(这是推测)。您可能想尝试一下:

su
chown root:sdcard_r /data/path/to/file

如果您的应用程序包含android.permission.READ_EXTERNAL_STORAGE,我认为您现在应该可以访问该文件了。您甚至可以使用未映射到任何权限的其他组。