有没有办法在根目录(例如/ data /)中在root的Android手机上编写和阅读文本文件?
InputStream instream = openFileInput("/data/somefile");
不起作用
答案 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二进制文件将其移动到新位置。