Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java runtime.exec()错误2,但在终端中有效_Java_Process_Exec_Runtime.exec - Fatal编程技术网

Java runtime.exec()错误2,但在终端中有效

Java runtime.exec()错误2,但在终端中有效,java,process,exec,runtime.exec,Java,Process,Exec,Runtime.exec,我通过添加一些字符串来创建一个命令字符串。若我调试我的应用程序并从变量中复制最终的字符串,那个么它在终端中可以完美地工作。如果tryRuntime.getRuntime().exec(cmd1)当cmd1是我的字符串时,它不起作用,我得到错误2(没有这样的文件或目录)。 我的代码如下所示: String cmd1 = sPath + " \"" + files[i].getPath() + "\" \"" + files[i].getPath().replace(".wav", "_L.wav

我通过添加一些字符串来创建一个命令字符串。若我调试我的应用程序并从变量中复制最终的字符串,那个么它在终端中可以完美地工作。如果try
Runtime.getRuntime().exec(cmd1)当cmd1是我的字符串时,它不起作用,我得到错误2(没有这样的文件或目录)。
我的代码如下所示:

String cmd1 = sPath + " \"" + files[i].getPath() + "\" \"" 
+ files[i].getPath().replace(".wav", "_L.wav") + "\" remix 1";
Process p1 = Runtime.getRuntime().exec(cmd1);
p1.waitFor();
最后一个cmd1字符串如下所示:

 /Users/Me/Downloads/sox-14.4.1/sox "/Users/Me/Desktop/DB/A1199/Klu a1.wav"
 "/Users/Me/Desktop/DB/A1199/Klu a1_L.wav" remix 1
知道我为什么会犯这个错误吗?我试着引用sox路径,但没用

好的,我试过这个:

String[] cmd1 = new String[4];
cmd1[0] = soxPath;
cmd1[1] = "'" + files[i].getPath() + "'";
cmd1[2] = "'" + files[i].getPath().replace(".wav", "_L.wav") + "'";
cmd1[3] = "remix 1";

ProcessBuilder builder = new ProcessBuilder(cmd1);
builder.redirectErrorStream(true);
System.out.println(builder.command().toString());
final Process p1 = builder.start();
copy(p1.getInputStream(), System.out);
p1.waitFor();

但我还是得到了同样的结果。。。命令在终端中工作,但java应用程序抛出错误:
/Users/Me/NetBeansProjects/DataPrepare/sox/sox失败格式:无法打开输入文件“/Users/Me/Desktop/DB/audio.wav”:没有这样的文件或目录

考虑使用
Runtime.exec()
。至少您可以获得打印在stderr上的内容。我尝试使用
ProcessBuilder
,但我遇到了相同的问题。您是否已将stdout/stderr重定向到文件?如果是,该文件说明了什么?阅读(并实施)的所有建议。这可能会解决问题。如果没有,它应该提供更多关于失败原因的信息。然后忽略它引用的
exec
,并使用
ProcessBuilder
构建
流程。还可以将
字符串arg
分解为
字符串[]args
,以说明本身包含空格的参数。@fge我不同意您所暗示的
exec
“不起作用”。从那篇文章中我们都应该知道,它确实有效,但有很多陷阱<代码>ProcessBuilder
更好,但如果忽略这些提示,也可能失败。