いくつかの文字列を追加してコマンド文字列を作成しています。アプリケーションをデバッグして変数から最終的な文字列をコピーすると、ターミナルで完全に機能します。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 FAIL formats: can't open input file "/Users/Me/Desktop/DB/audio.wav"': No such file or directory