我的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) + "\"";
这很有效。但我想知道这种做法是否有傻瓜证明?或者还有其他我应该处理的事情,就像我逃脱双引号一样?
任何帮助都会很棒!
答案 0 :(得分:1)
我认为你不需要这样做,例如
Runtime.getRuntime().exec(new String[] {"cmd", "/c", "dir", "d:/test ;test"})
工作正常,请注意“f:/ test; test”包含bot''和';'
答案 1 :(得分:1)
您是如何启动其他流程的?如果您使用的是version of Runtime.exec that takes an array,那么就不需要在任何参数中转义空格。
e.g。
Runtime.getRuntime().exec(new String[] { "notepad.exe",
"c:\path with spaces\afile.txt" });
答案 2 :(得分:1)
根据我在帖子下的评论:恕我直言,该方法不是傻瓜证明,因为它也会逃脱已经转义的引号。我会用:
private String escapeQuotes(String original) {
return original.replaceAll("(?<!\\\\)\"", "\\\\\"");
}
然后
System.out.println(escapeQuotes("Not escaped\", escaped\\\""));
打印
Not escaped\", escaped\"
,而您的版本将打印
Not escaped\", escaped\\"