使用Runtime.exec()从另一个目录执行程序

时间:2013-10-06 03:08:28

标签: java ffmpeg runtime exec

我想执行一个程序(System.getenv("appdata") + "ffmpeg")。我也希望能够得到一个可以让我获得consle输出的过程或其他东西。我之前尝试过“cmd / C”+ System.getenv("appdata") + "ffmpeg",但它似乎没有用。任何帮助表示赞赏!

以下是一些代码:

Process p = exec(testFFMpeg);
    int ex = -1;
    try {
        ex = p.waitFor();
    } catch (InterruptedException e) {
        e.printStackTrace();
        CrashHandler.reportCrash("FFMpeg", "Unable to test FFMpeg", "start up with more permissions");
    }

    if(ex == 0){
        System.out.println("Normal execution, exit value: " + ex);
        BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line = null;

        do{
            try {
                line = br.readLine();
                System.out.println(line);
            } catch (IOException e) {
                e.printStackTrace();
                CrashHandler.reportCrash("FFMpeg", "Unable to test FFMpeg", "start up with more permissions");
            }
        }while(line != null);
    }else{
        System.out.println("Execution exit value: " + ex);
    }
}

private static Process exec(String[] cmd){
    try {
        return Runtime.getRuntime().exec(cmd);
    } catch (IOException e) {
        e.printStackTrace();
        CrashHandler.reportCrash("FFMpeg", "Unable to test FFMpeg", "start up with more permissions");
    }

该文件的确切位置是:`System.getenv(“appdata”)+“\ VinVid \”+“ffmpeg.exe”。

3 个答案:

答案 0 :(得分:1)

我明白了。输出转到错误流,而不是inputStream。

答案 1 :(得分:0)

您缺少路径分隔符,请尝试此

System.getenv("appdata") + "\\ffmpeg"

答案 2 :(得分:0)

在您的代码中,将此行line = br.readLine();更改为line += br.readLine(); 这是你在java中运行windows进程的方法。 我不知道你想要什么输出。如果您要求打印您运行的流程的输出,此代码有助于:

String line;
String pidInfo ="";

Process p =Runtime.getRuntime().exec(System.getenv("appdata") +"ffmpeg.exe");

BufferedReader input =  new BufferedReader(new InputStreamReader(p.getInputStream()));

while ((line = input.readLine()) != null) {
    pidInfo+=line; 
}

input.close();

System.out.println(pidInfo);