0

Java プログラムが別のプロセスを起動し、コマンド ライン引数としてファイルの絶対パスを渡しています。パスにはスペースが含まれる場合があります。そのため、引数に追加する前にパスを引用しています。パスに二重引用符が表示された場合は、 でエスケープしてい\ます。

コードは次のとおりです。

private String escapeQuotes(String original) {
    StringBuilder builder = new StringBuilder();
    for (int i = 0; i < original.length(); i++) {
        if (original.charAt(i) == '"') {
            builder.append('\\');
        }
        builder.append(original.charAt(i));
    }
    return builder.toString();
}

私はそれを次のように使用します。

String args = " \"" + escapeQuotes(filePath) + "\"";

これはうまくいきます。しかし、このアプローチは誰にでもできるのでしょうか? または、二重引用符をエスケープした方法のように処理する必要があるものは他にありますか?

どんな助けでも素晴らしいでしょう!

4

3 に答える 3

1

投稿の下の私のコメントによると、IMHO、この方法は、すでにエスケープされている引用符もエスケープするため、絶対確実ではありません。私は使うだろう:

private String escapeQuotes(String original) {
    return original.replaceAll("(?<!\\\\)\"", "\\\\\"");
}

それで

System.out.println(escapeQuotes("Not escaped\", escaped\\\""));

版画

Not escaped\", escaped\"

コンソールで、あなたのバージョンは印刷されます

Not escaped\", escaped\\"

于 2013-01-03T12:08:06.337 に答える
1

これを行う必要はないと思います。

Runtime.getRuntime().exec(new String[] {"cmd", "/c", "dir", "d:/test ;test"})

「f:/test ;test」にはボット「 」と「;」が含まれていることに注意してください。

于 2013-01-03T11:54:09.210 に答える
1

他のプロセスをどのように起動していますか? 配列を受け取るバージョンの Runtime.exec を使用している場合、引数でスペースをエスケープする必要はありません。

例えば

Runtime.getRuntime().exec(new String[] { "notepad.exe", 
    "c:\path with spaces\afile.txt" });
于 2013-01-03T11:54:14.537 に答える