如何在java中读取command.com的输出

时间:2016-10-31 07:42:22

标签: java process output

我正在尝试从command.com 而不是 cmd.exe读取输出,所以我尝试使用此代码:

    Process p=Runtime.getRuntime().exec("command /c echo goodbye world"); //command.com doesn't work eiher
    p.waitFor(); 
    BufferedReader reader=new BufferedReader(
        new InputStreamReader(p.getInputStream())
        ); 
    String line=""; 
    String output="";
    while((line = reader.readLine()) != null) 
        { 
        output+=line;
        }
    System.out.print(line);

不幸的是,它没有打印任何东西,但是当我完全用cmd替换命令时它可以工作。 我已经尝试过在cmd中运行'命令/ c echo goodbye world',它可以工作。 我在Windows和XP中尝试过这个代码,因为在新的Windows版本中不存在command.com。

2 个答案:

答案 0 :(得分:0)

您可以尝试修改命令命令将其输出发送到文件,然后在p.waitFor()完成后,您可以从该文件中读取输入。

Process p=Runtime.getRuntime().exec("command /C echo goodbye world > output.txt");

这是一个猜测,但也许command.com解释器在/ C开关上区分大小写。也许尝试使用upper-C来看看会发生什么。此外,您可以使用ProcessBuilder而不是Process,因为它可以让您将命令的stderr重定向到stdout,以便您可以从输入流中收集它们。

答案 1 :(得分:0)

尝试捕获error outputexit code - 如果您在标准输出中没有看到任何内容,则错误信息流中可能会出现错误消息。如果它也是空的,退出代码可能会提供一些额外的调试细节。您可以咨询Windows exit code table以尝试确定退出的原因。

我的猜测是,由于某种原因,JVM无法以调用command的方式调用cmd(并且错误流包含此消息)。也许command不在JVM的PATH上,或者实际上不能从系统的shell中调用。您还可以尝试指定command.com可执行文件的完整路径。

顺便说一下,在编写像你一样的字符串时,你应该总是使用mutable StringBuilder;它使用更少的内存。更好的是library do the work for you