从java调用cmd.exe而不带参数

时间:2012-11-08 14:44:15

标签: java io java-io

我正在编写一些程序来使用其他命令调用cmd.exe,并使用java收集使用它生成的输出。以下是示例程序 -

public class LoadShell {
    public static void main(String[] args) throws Exception {
    //Line1
        String [] command ={"cmd.exe","/c","dir"};      
    ProcessBuilder probuilder = new ProcessBuilder( command );             
        Process process = probuilder.start();       
        InputStream inputstream1 = process.getInputStream();        
        InputStreamReader inputstreamreader1 = new InputStreamReader(inputstream1);
        BufferedReader bufferedreader = new BufferedReader(inputstreamreader1);      
        String line="";
        while ((line = bufferedreader.readLine()) != null) {
            System.out.println(line);
        }

  }
}

这些程序正如预期的那样正常运行。现在我有一个更简单的要求。我想调用没有任何参数的cmd.exe并将输出收集为String。这是因为我想将进程对象引用和字符串发送到另一个方法,以用于某些项目特定目的。所以我在Line1中修改了我的代码,如下所示 -

public class LoadShell {
    public static void main(String[] args) throws Exception {
          //Line1
      String [] command ={"cmd.exe"};
      ProcessBuilder probuilder = new ProcessBuilder( command );             
          Process process = probuilder.start(); 
          InputStream inputstream1 = process.getInputStream();        
          InputStreamReader inputstreamreader1 = new InputStreamReader(inputstream1);
          BufferedReader bufferedreader = new BufferedReader(inputstreamreader1);
          int intch;     
        String line="";
        while ((line = bufferedreader.readLine()) != null) {
            System.out.println(line);
        }

       }
}

但在这种情况下,readLine方法在打印后无限期挂起 -

Microsoft Windows [Version 6.1.7601] 版权所有(c)2009 Microsoft Corporation。保留所有权利。

所以我也尝试使用BufferedReader而不是readline的读取,如下所示 -

while ((intch = bufferedreader.read()) != -1) {
            int ch = (char) intch;
            System.out.println(ch);
          }

但是在读取对应于 -

的字节后,甚至读取都会挂起
 Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

有什么方法可以获得下面的完整输出而不会导致我的程序挂起 -

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Users\devshankhasharm>

任何想法都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

可能是因为没有/c标志你只是打开一个shell窗口,而外部进程现在位于C:\>提示符处等待发出命令。既然你从不发送任何东西,它就会坐在那里直到你杀了它。