3

わかりました、これはおそらく初歩的な質問であることはわかっていますが、私はJavaにかなり慣れていないので、おそらく答えるのはかなり簡単でしょう。私がやろうとしているのは、ファイル パスを使用して Firefox を開くプログラムを作成することですが、ファイル パスに問題があるようです。いくつかの調査を行い、二重スラッシュを使用してエスケープ文字を無効にしましたが、それでも機能しません。一部のディレクトリ名にスペースが含まれていることが関係していると思います。これが私のコードです:

import java.io.IOException;

public class Automation {

public static void main(String[] args) throws IOException {
        Process p = Runtime.getRuntime().exec("C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");
    }
}

私はそれが非常に単純であることを知っていますが、まだ理解できません。どんな助けでも大歓迎です。

4

3 に答える 3

1

問題の理想的な解決策は次のようになります。

String [] cmds = new String [1];
cmds[0] = "C:\\Program Files (x86)\\Mozilla firefox\\firefox.exe";
Process p = Runtime.getRuntime().exec(cmds);

これは、Runtime.getRuntime().exec()実際にはコマンド ライン インタープリターのようにプログラムを実行しないためです。したがって、パスに空白がある場合は、パラメーター配列を使用する必要があります。この配列に追加のフラグ/オプションを指定できます (例: open)。

これはいくつかの追加情報です。/私が知る限り、Windows APIはスラッシュとバックスラッシュを受け入れるため、Windowsはスラッシュ()に完全に満足しています(MS DOS 2.0私が思うに)。たとえばdir "c:/Program Files (x86)"、ディレクトリリストが表示されれば問題なく動作します。さらに、空白がなくても問題なくProcess p = Runtime.getRuntime().exec("C:/SomeProgram/someprogram.exe");動作します。ただし、推奨される方法は、環境からファイル区切りを取得することです。それは使っているFile.separator

于 2013-05-19T21:28:48.470 に答える
1
"\"C:\\ .......\""

したがって、空白を「エスケープ」できます。

于 2013-05-19T20:44:11.560 に答える