我有一段像这样的代码
{{1}}
bash文件将音频文件转换为不同的格式/采样率,并将其输出到Audio文件夹。但每当我运行这个脚本时,我得到以下输出:
{{1}}
似乎测试文件是否存在的代码行是在运行脚本的代码之前执行的。如果我再次运行该程序,它将输出" true"因为该文件已在最后一次迭代中创建。有没有办法让ProcessBuilder调用的文件先执行?提前谢谢!
答案 0 :(得分:0)
我不确切知道为什么ProcessBuilder会这样做,但这是一个解决方案。这条线
pb.start();
将返回一个Process对象,因此如果该行替换为以下两行
Process p = pb.start();
p.waitFor();
程序将暂停,直到进程完成执行 '
注意:这必须被try / catch块包围,因为p.waitFor()会抛出InterruptedException
答案 1 :(得分:0)
ProcessBuilder.start()将该流程作为单独的流程启动并继续执行。如果您需要等到该进程终止,请修改代码,如下所示。然后你将得到所需的输出。
File f = new File("Audio/Testing/mbgitr.wav");
try {
ProcessBuilder pb = new ProcessBuilder("bash/extractAudio.sh", f.getAbsolutePath());
pb.inheritIO();
Process p = pb.start(); // Get the process
p.waitFor(); // Wait until it terminates
}catch(IOException e){
System.out.println("Oh no!");
}catch(InterruptedException e){
System.out.println("InterruptedException");
}
System.out.println(new File("Audio/mbgitr.wav").exists());