2012-05-14 8 views
2

2つの引数を持つコマンドラインプログラムを実行する必要があります。ただし、作業ディレクトリで実行する必要があります。つまり、「c:\ folder \ subfolder \ command arg1 arg2」以外の「command arg1 arg2」です。Javaの特定の作業ディレクトリでコマンドラインプログラムを実行する必要があります

ここで他の質問からRuntime.exec(cmdArray、null、workingDirectory)を使用しています。私は "CreateProcessエラー= 2、システムが指定されたファイルを見つけることができません"を取得し続けます。私はチェックして、パスとファイルの両方が存在するので、何がうまくいかないのか分からない。ここで私が使用しているコードです。

String [] fileName = {"mp3wrap.exe", "Clear_10", "*.mp3"}; 
String dirName = "E:\\Music\\New Folder\\zz Concatinate\\Clear_10"; 
try { 
    Runtime rt = Runtime.getRuntime(); 
    Process pr = rt.exec(fileName, null, new File(dirName)); 
    BufferedReader input = new BufferedReader(new InputStreamReader 
     (pr.getInputStream())); 
    String line = null; 
    while ((line = input.readLine()) != null) { 
     System.out.println(line); 
    }//end while 
    int exitVal = pr.waitFor(); 
    System.out.println("Exited with error code " + exitVal); 
}//end try 
catch (Exception e) { 
    System.out.println(e.toString()); 
    e.printStackTrace(); 
}//end catch` 

私はこのエラーを取得しています:

にjava.io.IOException:プログラム "mp3wrap.exe" を実行できません(ディレクトリ内の "E:音楽\新しいフォルダ\のZZ Concatinate \ Clear_10 \") :CreateProcess error = 2、指定されたファイルが見つかりません

答えて

4

mp3wrap.exe全体のパスを指定します。

Javaでは、PATHを使用してmp3wrapを検索していません。

- コメントの後 更新:

わかりました - 質問を再読、彼はディレクトリ内からプログラムを起動する方法を要求します。プログラムが必要とする場合は、このディレクトリにある間にJavaプログラムを起動する必要があります。

プログラム全体のパスを指定するか、現在のディレクトリで検索する指示でプログラムを起動する必要があります。 Windowsでは、現在のディレクトリが常に検索されることを覚えています。他のシステムはここでは違いますので、Windows上で動作するドットで現在のディレクトリを指定します: "./mp3wrap"。

+0

パス全体を渡しますか?あなたは精巧にplできますか? –

+0

@Zedai:Windowsの場合「C:¥¥Programs¥¥tools¥¥audio¥¥JoinTheParty¥¥Player¥¥mp3wrap.exe」などです。 Linuxの ''/usr/local/bin/mp3wrap ''などです。 –

+1

質問を読み返して答えを広げてください。 –

2

ProcessBulder.start()をお試しください。 env変数、作業ディレクトリ、およびstart()メソッドによって生成されたProcessに渡すargを設定できます。サンプルの呼び出しについては、Javaのドキュメントを参照してください。

関連する問題