我正在尝试 OutputStream
Process
启动的 exec()
获取到控制台。如何才能做到这一点?
这是一些不完整的代码:
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.Reader;
public class RuntimeTests
{
public static void main(String[] args)
{
File path = new File("C:\\Dir\\Dir2");
String command = "cmd /c dir";
Reader rdr = null;
PrintStream prtStrm = System.out;
try
{
Runtime terminal = Runtime.getRuntime();
OutputStream rtm = terminal.exec(command, null, path).getOutputStream();
prtStrm = new PrintStream(rtm);
prtStrm.println();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
原文由 TheWolf 发布,翻译遵循 CC BY-SA 4.0 许可协议
请参阅 Benjamin Gruenbaum 对自 Java 7 以来可用的 ProcessBuilder API 的回答。
您需要启动一个新线程来读取
Process.waitFor()
之后发生的进程输出。然后可以从该线程将进程输出复制到控制台。Process.getOutputStream()
实际上是输入,即进程的标准输入。Process.getInputStream()
和Process.getErrorStream()
返回InputStream
对象,它们是进程的标准输出和标准错误。InputStream
s和OutputStream
是从调用者的角度,与进程的角度相反。进程的输出 stdout 是调用者的输入,因此调用者得到一个
getInputStream()
并从中读取 stdout:Process.getOutputStream()
用于调用者将数据“输出”到进程的标准输入中。可以在上面示例的第一行中创建“proc”之后添加此代码,以将数据发送到进程的标准输入中:在读取输出之前执行上述操作。请记住关闭
OutputStream
操作系统(使用 try/resource 或 try/finally)。因此,该进程知道 stdin 已完成并且可以完成对信息的处理。