2012-04-24 10 views
2

標準入力から入力を受け取るプログラムがあると仮定します。例えばjava.lang.Processクラスを使用して別のプロセスに入力を提供する方法

:私は把握したい何

cin>>id; 

は、プロセスを実行し、その標準入力にいくつかの入力を与える方法です。プロセスの出力を取得することは私にとって問題ではありません。それは適切に動作します。問題は、そのようなプロセスの入力をjava.lang.Processクラスを使用して入力する方法です。

Apacheコモンズのような他のサードパーティのライブラリがある場合は、それらについても言及してください。

ありがとうございます!

答えて

2

1つのプロセスの出力から読み込んで別のプロセスに入力として書き込む別のスレッドを開始する必要があります。

このような何かを行う必要があります

:次のようにprod >> consために使用されるであろう

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

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()それへ。 出力ストリームから入力データをプロセスに使用していますが、名前は返されるインターフェイスを反映しています(アプリケーションの観点からは、出力です)。

関連する問題