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
任意のアイデア大歓迎についてどのように
unrarに(.shのような)拡張子がない場合は、cmd配列に入れてみることができますか? – Reddy
も参照してくださいhttp://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=4役立つ場合 – Reddy
リンクをありがとう、この特定の問題を手伝ってくれていない出力をファイルの例にリダイレクトすると、私は別のもので私を助けました。 unrarは拡張子がないようです。 – chargedPeptide