小编典典
在尝试侦听输入流之前,您已经尝试写入输出流,因此您什么也没看到是有道理的。为使此成功,您将需要对两个流使用单独的线程。
即
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Scanner;
public class Foo {
public static void main(String[] args) throws IOException {
Process cmd = Runtime.getRuntime().exec("cmd.exe");
final InputStream inStream = cmd.getInputStream();
new Thread(new Runnable() {
public void run() {
InputStreamReader reader = new InputStreamReader(inStream);
Scanner scan = new Scanner(reader);
while (scan.hasNextLine()) {
System.out.println(scan.nextLine());
}
}
}).start();
OutputStream outStream = cmd.getOutputStream();
PrintWriter pWriter = new PrintWriter(outStream);
pWriter.println("echo Hello World");
pWriter.flush();
pWriter.close();
}
}
而且,您实际上也不应该忽略错误流,而应该吞噬错误流,因为忽略错误流有时会耗尽您的进程,因为它可能会耗尽缓冲区空间。
2020-09-21