3

標準入力から入力を受け取るプログラムがあると仮定してください。

例えば:

cin>>id;

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

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

前もって感謝します!

4

2 に答える 2

3

それに使用Process.getOutputStream()write()ます。出力ストリームを使用してプロセスにデータを入力するため、少し注意が必要ですが、名前は返されるインターフェイスを反映しています(アプリの観点からは、書き込みを行っているため、出力されます)。

于 2012-04-24T07:36:20.490 に答える
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();
    }
}
于 2012-04-24T07:35:39.200 に答える