Java 当程序不断更新命令提示符中的一行时从命令行中执行的程序获取输出

Java getting output from program executed in command line when it constantly updates a single line in the command prompt

我有一个关于通过命令行从我的 java 程序 运行s 的程序的特定实例获取输出的快速问题。只要程序输出多行,我就可以获得程序的输出,但如果它是一个更新当前行的程序,我似乎就不走运了。例如,当我尝试使用 ffmpeg 将 mp4 转换为 mp3 时,它只会有一行包含文件当前大小和到达 运行 所花费的时间,而在 运行ning 时我似乎无法获得通过我的 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();
    }

如有任何帮助,我们将不胜感激!谢谢!

我想我明白发生了什么。 readLine() 正在寻找 '\n' 字符。单行程序发出一个 '\r' to return 到行的开头并一遍又一遍地重写它。

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

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

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

Reads a line of text. A line is considered to be terminated by any one of a line feed ('\n'), a carriage return ('\r'), or a carriage return followed immediately by a linefeed.

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