【问题标题】:Obtain in/out streams to file via process (shell)通过进程(shell)获取输入/输出流到文件
【发布时间】:2013-01-28 16:45:16
【问题描述】:

我的应用程序 (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();

我需要从进程中打开一个文件,并将其定向到标准输出,以便我的 Java 应用程序可以读取所述文件(以及类似的写入文件)。但是,我对 Linux 不是很熟悉,所以我不知道从哪里开始。谁能指出我正确的方向?

谢谢, 五重奏。

【问题讨论】:

    标签: android shell inputstream outputstream


    【解决方案1】:

    我只会回答我自己的问题。这是我目前的做法:

    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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-14
      • 1970-01-01
      • 2015-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多