不带参数从java调用cmd.exe

不带参数从java调用cmd.exe,java,io,java-io,Java,Io,Java Io,我正在编写一些程序,用附加命令调用cmd.exe,并使用java收集从同一命令生成的输出。下面是一个示例程序-- 这些程序按预期运行良好。现在我有一个更简单的要求。我想在不带任何参数的情况下调用cmd.exe,并将输出收集为字符串。这是因为我想将流程对象引用和字符串发送到另一个方法,以实现特定于项目的目的。因此,我修改了第1行中的代码,如下所示-- 但在本例中,readLine方法在打印后无限期挂起-- Microsoft Windows[版本6.1.7601] 版权所有(c)2009微软公司。

我正在编写一些程序,用附加命令调用cmd.exe,并使用java收集从同一命令生成的输出。下面是一个示例程序--

这些程序按预期运行良好。现在我有一个更简单的要求。我想在不带任何参数的情况下调用cmd.exe,并将输出收集为字符串。这是因为我想将流程对象引用和字符串发送到另一个方法,以实现特定于项目的目的。因此,我修改了第1行中的代码,如下所示--

但在本例中,
readLine
方法在打印后无限期挂起--

Microsoft Windows[版本6.1.7601] 版权所有(c)2009微软公司。版权所有

因此,我还尝试使用了读取
BufferedReader
而不是
readline
,如下所示--

但是,即使读取了对应于--

是否有任何方法可以在不导致程序挂起的情况下获得下面的完整输出--


如果您有任何想法,我们将不胜感激。

可能是因为没有
/c
标志,您只需打开一个shell窗口,而外部进程现在位于
c:\>
提示符处,等待发出命令。由于您从未发送任何内容,因此它将一直保存到您将其杀死。

当您仅使用cmd.exe调用时,命令窗口不会打开。它只在控制台中提供部分输出,并无限期挂起。是的,您可以实际运行我的程序并查看。
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);
        }

  }
}
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);
        }

       }
}
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>