我正在尝试使用 bash 命令使用 Java 获取视频文件的持续时间
avconv -i test.avi 2>&1 | grep 'Duration' | awk '{print $2}' | sed s/,//
当我刚刚在终端中输入上述命令时,终端中正好显示一个输出行,显示如下所示的持续时间:
00:09:56.45
现在我想从 Java 运行这个命令并将输出的持续时间作为字符串接收。我的代码如下:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test {
public static void main(String[] args){
String command = "avconv -i test.avi 2>&1 | grep 'Duration' | awk '{print $2}' | sed s/,//";
StringBuffer output = new StringBuffer();
Process p;
String result = "init";
try {
p = Runtime.getRuntime().exec(command);
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
result = in.readLine();
in.close();
} catch (IOException e) { e.printStackTrace(); }
System.out.println(result);
}
}
但是,这会返回null
。因此, 的值result
被改变了,result = in.readLine())
但是,而不是实际的终端输出,result = null
被设置了。
所以in.readLine())
似乎没有接收到命令的输出,即使当我在那里输入命令时,这在终端中完美输出。
为什么 Java 不能读取这个终端输出?