0

有没有办法在根目录(例如/data/)中写入和读取根目录中的 Android 手机上的文本文件?

InputStream instream = openFileInput("/data/somefile");

不工作

4

2 回答 2

3

如果您是 root 用户,您只能访问 /data 文件夹。

通过 OutputStream 调用 SU 二进制并通过 SU 二进制写入字节(这些字节是命令)并通过 InputStream 读取命令输出,这很容易:
调用cat命令以读取文件。

try {
    Process process = Runtime.getRuntime().exec("su");
    InputStream in = process.getInputStream();
    OutputStream out = process.getOutputStream();
    String cmd = "cat /data/someFile";
    out.write(cmd.getBytes());
    out.flush();
    out.close();
    byte[] buffer = new byte[1024 * 12]; //Able to read up to 12 KB (12288 bytes)
    int length = in.read(buffer);
    String content = new String(buffer, 0, length);
    //Wait until reading finishes
    process.waitFor();
    //Do your stuff here with "content" string
    //The "content" String has the content of /data/someFile
} catch (IOException e) {
    Log.e(TAG, "IOException, " + e.getMessage());
} catch (InterruptedException e) {
    Log.e(TAG, "InterruptedException, " + e.getMessage());
}

不使用 OutputStream 写入文件,OutputStream用于在 SU 二进制文件中执行命令,并InputStream用于获取命令的输出。

于 2015-09-11T00:03:06.010 回答
1

为了能够执行您所要求的操作,您必须通过 SU 二进制文件执行所有操作。

喜欢...

try {
      Process process = Runtime.getRuntime().exec("su");
      process.waitFor();
    } catch (IOException e) {
      e.printStackTrace();
    } catch (InterruptedException e) {
      e.printStackTrace();
    }

阅读会比写作更容易,因为最简单的写作是将文件写入您可以使用标准 java api 访问的某个地方,然后使用 su 二进制文件将其移动到新位置。

于 2012-09-11T16:06:05.593 回答