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

根据我在帖子下的评论:恕我直言,该方法并非万无一失,因为它还会转义已经转义的引号。我会使用:

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”包含 bot ' ' 和 ';'

于 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 回答