我在java中执行了Windows进程(在这个特定情况下是cmd.exe)并且偶然发现了一个问题。
命令net statistics server
(没有其他命令)没有反应。
我在SO上看到的例子创建了他们需要的所有参数的过程。但我想直接写入流程的输出流。那我该怎么办呢?我做错了什么?
public class CmdExecutor
{
public static void main(String[] args)
{
ProcessBuilder pb = new ProcessBuilder("cmd");
pb.directory(new File("/"));
Process p = null;
try
{
p = pb.start();
}
catch (IOException e)
{
System.out.println(e.getMessage());
}
if (p != null)
{
Scanner s = new Scanner(p.getInputStream());
PrintWriter out = new PrintWriter(p.getOutputStream());
boolean commandSent = false;
while (s.hasNext())
{
System.out.println(s.nextLine());
if (!commandSent)
{
out.println("net statistics server");
commandSent = true;
}
}
}
}
}
仅输出:
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. Alle Rechte vorbehalten.
答案 0 :(得分:3)
PrintWriter
在缓冲区已满之前不会将数据写入OutputStream
。您可以手动刷新
out.flush();
或使用使用 autoflush
的构造函数PrintWriter out = new PrintWriter(p.getOutputStream(), true);