android根目录下打开文件

时间:2012-09-11 15:22:22

标签: android root

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

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

不起作用

2 个答案:

答案 0 :(得分:3)

你只能访问/ data文件夹,你是root用户。

通过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用于获取命令的输出。

答案 1 :(得分:1)

为了能够做你所要求的,你必须通过SU二进制文件完成所有操作。

像...

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

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