我的应用程序(DataSync)必须读取和写入只能由root访问的文件,所以我只能使用shell来操作这些文件。我目前复制了一个我想访问缓存目录的文件,之后我可以从我的Java代码创建一个输入或输出流到缓存文件。编写文件的方式相同(但反过来说)。
由于缓存此文件相对耗时,我希望直接从这些文件读取或写入,而无需缓存目录。我基本上试图使用进程输入和输出流来读取或写入文件,如下所示:
Process p = Runtime.getRuntime().exec("su");
OutputStream out = p.getOutputStream();
InputStream in = p.getInputStream();
// Write open file command to outputstream
// Read file contents from inputStream
out.close();
in.close();
我需要从进程中打开一个文件,并将其指向stdout,以便我的Java应用程序可以读取所述文件(以及类似的写入内容)。但是,我对Linux不太熟悉,所以我不知道从哪里开始。有人能指出我正确的方向吗?
谢谢, 五重峰
答案 0 :(得分:2)
我只想回答我自己的问题。这就是我现在正在做的事情:
public static InputStream getInputStream(File file) throws IOException
{
try
{
return new FileInputStream(file);
}
catch(Exception e)
{
Process p = Runtime.getRuntime().exec("su");
DataOutputStream outputS = new DataOutputStream(p.getOutputStream());
outputS.writeBytes("cat \"" + file.getPath() + "\"\n");
outputS.writeBytes("exit\n");
outputS.flush();
outputS.close();
return p.getInputStream();
}
}
对于OutputStream:
public static OutputStream getOutputStream(File file) throws IOException
{
Process p = Runtime.getRuntime().exec("su");
DataOutputStream outputS = new DataOutputStream(p.getOutputStream());
outputS.writeBytes("mkdir -p \"" + file.getParent() + "\"\n");
outputS.writeBytes("cat - > \"" + file.getPath() + "\"\n");
return (OutputStream) outputS;
}