0

このコードがあるとしましょう

import java.io.IOException;

public class Test
{
 public static void main(String[] argv) throws InterruptedException, IOException {
    String path = "/an app with spaces.app";
    path = path.replaceAll(" ", "\\\\ ");
    System.out.println(path);
    Runtime.getRuntime().exec( new String[] { "open", path} );
     Runtime.getRuntime().exec("syslog -s -l " + path);
 }
}

問題は、印刷でパスを出力してターミナルでコマンドを試すと、アプリケーションが開きますが、Java からコマンドを実行しようとすると、単に閉じてしまうことです。バックスラッシュのエスケープの問題でしょうか? 私がやりたいことは、端末を使用するかどうかにかかわらず、名前にスペースが含まれるアプリを開くことだけです。

4

2 に答える 2

0

を使用してスペースをエスケープする必要はありませんexec

私はあなたのコードを試してみましreplaceAllた.

また、syslog -lログ レベルの引数が必要です。

于 2012-07-27T21:06:22.740 に答える
0

Runtime.exec() の代わりにProcessBuilderを使用します。

于 2012-07-28T23:24:24.480 に答える