2010-12-03 11 views
1

Os xでプログラムを実行しているときに、別のサブディレクトリにあるファイルをunrarする必要があります。私はフリーウェアのコマンドラインツールをunrarと呼ぶことでこれを行います。これはうまくいきます。 しかし、unrarは常に現在の作業ディレクトリのファイルをunrarします。つまり、実行されたプロセスの作業ディレクトリを指定するか、.jarホームフォルダ内のすべての展開されたファイルを取得する必要があります。 これは、processBuilder.directory(dir)またはrunTime.getRuntime().exec(args,null,dir)のいずれかを使用するのは簡単です(たとえば、dirがFileの場合)。 これは優れていますが、作業ディレクトリにスペースが含まれている場合は機能しません。使用している間Javaでスペースを含む作業ディレクトリで外部実行ファイルを実行していますか?

File dir=new File("/Users/chargedPeptide/rar 2"); 
String[] cmd = { "/Users/chargedPeptide/rar/unrar", "e", "-o+","/Users/chargedPeptide/rar", "2/weather.rar"}; 
Process pr = Runtime.getRuntime().exec(cmd,null,dir); 
int exitValue=pr.waitFor(); 

は、動作しません:短い例としてProcess pr = Runtime.getRuntime().exec(cmd);ではなく、コマンドを正常に起動しますが、作業ディレクトリのjarファイル内のすべてのファイルを私に残します。 代わりProcessBuilderをを使用してメッセージを持つディレクトリ 終了設定したp rocessbuilder.directory(dir);を使用して:

Exception: Cannot run program "/Users/chargedPeptide/rar/unrar" (in directory "/Users/chargedPeptide/rar 2"): error=2, No such file or directory 

ヘルプ?どのようにスペースを処理するのですか?私はスペースの前にバックスラッシュを追加しようとしましたが、Fileオブジェクトはそれらをパスの実際の部分のように扱いますので、助けてくれません。 1. executeメソッドにコマンドとディレクトリをprocessbuilderに与える別のメソッドがあります。すべてのディレクトリは前のメソッドで見つかって存在します。 dirにスペースが含まれている場合を除き、これは機能します。 2.作業ディレクトリを設定する必要があります。そうしないと、コマンドが間違った場所で実行されます。 3.ファイルオブジェクトを次のように解析します。 dir = new File(dir.tostring.replace( ""、 "\"); すべてのスペースの前にバックスラッシュを挿入するためのjavaファイルオブジェクトは、実際のバックスラッシュを含むパスはありません運 は、いずれかの代わりに、ProcessBuilderをするdosen'tヘルプのrt.execを4.Using

任意のアイデア大歓迎についてどのように

+0

unrarに(.shのような)拡張子がない場合は、cmd配列に入れてみることができますか? – Reddy

+0

も参照してくださいhttp://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=4役立つ場合 – Reddy

+0

リンクをありがとう、この特定の問題を手伝ってくれていない出力をファイルの例にリダイレクトすると、私は別のもので私を助けました。 unrarは拡張子がないようです。 – chargedPeptide

答えて

1

:。。。。

dir.mkdirs(); 

起動する前にプロセス。

これは、不足しているディレクトリを作成します。

編集

これは奇妙に見えます。

String[] cmd = { "/Users/chargedPeptide/rar/unrar", "e", "-o+","/Users/chargedPeptide/rar", "2/weather.rar"}; 

これはシェルがいた場合は、書きたい:

unrar e -o+ "/Users/chargedPeptide/rar 2/weather.rar" 

あなたが実際にそれ以外の場合は、プロセスに2つの引数として解釈されるため、引用符で.RARファイルを配置する必要があります。

「cmd」を分割したやり方では、rar引数を2つに分割します。試してみてください:

String[] cmd = { "/Users/chargedPeptide/rar/unrar", "e", "-o+","/Users/chargedPeptide/rar 2/weather.rar"}; 
+0

申し訳ありません、私は明らかにする必要があります、ディレクトリが存在し、私の実際のコードでは、別の方法で。この方法ではうまく処理されず、ディレクトリが存在しないと示されているこのケース「rar 2」のスペースのようです。 – chargedPeptide

+0

コードについてのご質問に新しいので、ご理解ください。 – chargedPeptide

+1

本当に見つからないディレクトリですか? '例外:...そのようなファイルやディレクトリはありません 'は' unrar'実行可能ファイルが見つからないことを示します。それはa)存在し、b)chmod a + xですか? –

0

正常に機能するかどうかはわかりませんが、パスの最後に/を入れてみてください。すなわち、 、

File dir=new File("/Users/chargedPeptide/rar 2/"); 
+0

それは、悲しいことに同じことを試してみました... – chargedPeptide

関連する問題