2012-04-24 48 views
2

假设有一个程序从标准输入接收输入。如何使用java.lang.Process类为另一个进程提供输入

例如:

cin>>id; 

我想要什么弄清楚是如何执行的过程,并给予一定的投入到它的标准输入。获得流程的输出对我来说不是问题。它正常工作。问题是如何使用java.lang.Process类为此类流程提供输入。

如果还有任何其他第三方库像Apache共享请提及它们。

在此先感谢!

回答

2

您需要启动一个单独的线程,该线程从一个进程的输出读取并将其作为输入写入另一个进程。

像这样的东西应该做的:

class DataForwarder extends Thread { 

    OutputStream out; 
    InputStream in; 

    public DataForwarder(InputStream in, OutputStream out) { 
     this.out = out; 
     this.in = in; 
    } 

    @Override 
    public void run() { 
     byte[] buf = new byte[1024]; 
     System.out.println("Hej"); 
     try { 
      int n; 
      while (-1 != (n = in.read(buf))) 
       out.write(buf, 0, n); 
      out.close(); 
     } catch (IOException e) { 
      // Handle in some suitable way. 
     } 
    } 
} 

这将被用于prod >> cons如下:

class Test { 
    public static void main(String[] args) throws IOException { 

     Process prod = new ProcessBuilder("ls").start(); 
     Process cons = new ProcessBuilder("cat").start(); 

     // Start feeding cons with output from prod. 
     new DataForwarder(prod.getInputStream(), cons.getOutputStream()).start(); 
    } 
} 
2

使用Process.getOutputStream()write()它。这是一个有点棘手,因为你使用输出流到输入输入数据的过程,但名称反映返回的接口(从您的应用程序的角度来看它是输出,因为你正在写它)。

相关问题