我有一个关于从我的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();
}
任何帮助将不胜感激!谢谢!
答案 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()并逐个打印字符可能更容易