0

我正在尝试使用 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 不能读取这个终端输出?

4

1 回答 1

0

使用这个->

try{
            Process duration = Runtime.getRuntime().exec(new String[] { "sh", "-c", "avconv -i test.avi 2>&1 | grep 'Duration' | awk '{print $2}' | sed s/,//"});   
String line
BufferedReader in = new BufferedReader(new InputStreamReader(duration.getInputStream()) );
                while ((line = in.readLine()) != null) {
                    System.out.println(line);
               }
}catch(IOException e){
  e.printStackTrace();
}
于 2015-04-17T11:23:27.153 回答