2012-04-24 130 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()它。這是一個有點棘手,因爲你使用輸出流到輸入輸入數據的過程,但名稱反映返回的接口(從您的應用程序的角度來看它是輸出,因爲你正在寫它)。

相關問題