假設有一個程序從標準輸入接收輸入。如何使用java.lang.Process類爲另一個進程提供輸入
例如:
cin>>id;
我想要什麼弄清楚是如何執行的過程,並給予一定的投入到它的標準輸入。獲得流程的輸出對我來說不是問題。它正常工作。問題是如何使用java.lang.Process
類爲此類流程提供輸入。
如果還有任何其他第三方庫像Apache共享請提及它們。
在此先感謝!
假設有一個程序從標準輸入接收輸入。如何使用java.lang.Process類爲另一個進程提供輸入
例如:
cin>>id;
我想要什麼弄清楚是如何執行的過程,並給予一定的投入到它的標準輸入。獲得流程的輸出對我來說不是問題。它正常工作。問題是如何使用java.lang.Process
類爲此類流程提供輸入。
如果還有任何其他第三方庫像Apache共享請提及它們。
在此先感謝!
您需要啓動一個單獨的線程,該線程從一個進程的輸出讀取並將其作爲輸入寫入另一個進程。
像這樣的東西應該做的:
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();
}
}
使用Process.getOutputStream()
和write()
它。這是一個有點棘手,因爲你使用輸出流到輸入輸入數據的過程,但名稱反映返回的接口(從您的應用程序的角度來看它是輸出,因爲你正在寫它)。