以交互方式向java.lang.Process发送命令失败

时间:2013-09-03 12:34:28

标签: java windows process cmd

我在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.

1 个答案:

答案 0 :(得分:3)

PrintWriter在缓冲区已满之前不会将数据写入OutputStream。您可以手动刷新

out.flush();

或使用使用 autoflush

的构造函数
PrintWriter out = new PrintWriter(p.getOutputStream(), true);