立即获得命令提示输出?

时间:2013-04-07 17:38:30

标签: java cmd command-prompt output

可能是一个误导性的标题,但感谢人们对我的另一个问题,我的程序有点工作,但现在不知道该怎么做。

这是我运行命令提示符命令并返回输出

的方法
public static String cmdExec(String cmdLine) {
    String line;
    String output = "";
    try {
        Process p = Runtime.getRuntime().exec(cmdLine);
        BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
        while ((line = input.readLine()) != null) {
            output += (line + '\n');
        }            
        input.close();           
        }
    catch (Exception ex) {
        ex.printStackTrace();
    }

    return output;
}

它的工作原理我希望它能够工作,但是现在当我运行这个方法时,它会等到一切都完成,然后返回输出,这不是我想要的。

我制作了一个使用cmdExec方法的ping flooding方法。这是我如何调用cmdExec()

String[] input = ipTextField.getText().split(":");

    if(input.length == 2) {
        System.out.println(cmdExec("cmd /c ping " + input[0] + " -t -n " + Integer.parseInt(input[1])));

所以现在,例如,如果我在程序中键入“127.0.0.1:3”,它将向localhost发送3个数据包。现在的问题是,不是打印输出从命令提示符1输出的行,而是等待所有3个数据包发送,然后打印输出完整输出。

如果我在命令提示符下键入“ping 127.0.0.1 -t -n 3”,它将逐个打印回复,而不是一次打印,所以我如何在我的程序中执行相同操作?

2 个答案:

答案 0 :(得分:2)

而不是

while ((line = input.readLine()) != null) {
            output += (line + '\n');
        } 

要立即将结果输出到命令行,只需在while循环中打印

     while ((line = input.readLine()) != null) {
         System.out.println(line);               
         output += (line + '\n');
      } 

答案 1 :(得分:0)

您可以使用以下方式连续打印:

while ((line = input.readLine()) != null) {
    System.out.println(line);
    output += (line + '\n');
}   

(以下内容对未来的观众仍然有用,但不是该问题的适用答案。) 只需在从输出流中读取之前插入process.waitFor()。此命令等待,直到进程在继续之前死亡。然后,您也不必逐行阅读。您可以简单地一次性转储缓冲区。

<击>

或者这样,或者你可以找到一个只出现在最后一行的字符串(例如Windows中的Minimum)并将while条件更改为:

while((line == input.readline()).indexOf("Minimum") == -1)

<击>