如何使用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() 。 由于您使用输出流向进程输入数据,这有点棘手,但名称反映了返回的接口(从您的应用程序的角度来看,它是输出的,因为您正在写入它)。