当Java在命令提示符中不断更新单行时,Java从命令行执行的程序输出

时间:2015-11-24 14:03:20

标签: java io command-prompt outputstream

我有一个关于从我的java程序通过命令行运行的程序的特定实例获取输出的快速问题。只要输出多行,我就能得到程序的输出,但如果它是一个更新当前行的程序,我似乎运气不好。例如,当我尝试使用ffmpeg将mp4转换为mp3时,它只有一行文件的当前大小和运行时间,这在我通过我的java程序运行时似乎无法获得。这是我使用的代码,当有多行时可以使用:

InputStream is = pr.getInputStream();
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);
    String line;
    System.out.printf("Output of running %s is:\n",
            Arrays.toString(command1));
    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }

    try {
        int exitValue = pr.waitFor();
        System.out.println("\n\nExit Value is " + exitValue);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

任何帮助将不胜感激!谢谢!

2 个答案:

答案 0 :(得分:0)

我想我知道发生了什么。 readLine()正在寻找一个' \ n'字符。单行程序发出一个' \ r'返回到行的开头并反复重写。

我阅读了commons-io和javadocs,他们都没有readLine(char c),直到遇到某个特定字符才会读取,所以不幸的是我认为你必须为自己编写代码。 :\

答案 1 :(得分:0)

如果你使用br.readLine(),你需要确定它已被终止。

来自javadoc https://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#readLine()

  

读取一行文字。一条线被认为是由换行(' \ n'),回车(' \ r')或车厢中的任何一条终止   返回后立即换行。

仅使用read()并逐个打印字符可能更容易