【发布时间】:2015-06-21 21:46:52
【问题描述】:
我正在尝试通过 Runtime.exec() 调用运行一个应用程序。
由于某些参数有空格,我怎样才能正确地转义参数,使其在 Linux 和 Windows 中都可以工作?我知道在 Windows 中,您通常在带有空格的字符串周围使用双引号,而 linux 使用斜杠。
有了空格,我希望我正在运行的程序(现在是 Windows 的 xcopy)几乎立即返回并指示参数数量错误。但是,waitFor() 调用挂起。
String[] commandArray = new String[3];
commandArray[0] = applicationPath;
commandArray[1] = someFileWhichMayHaveSpaces;
commandArray[2] = anotherFileWhichMayHaveSpaces;
Process appProcess = Runtime.getRuntime().exec(commandArray);
int returnCode = appProcess.waitFor();
【问题讨论】:
-
我认为在使用 Runtime.exec() 时不需要转义参数。参数应直接传输到目标应用程序,无需任何修改。
-
切换到
ProcessBuilder -
切换到具有相同args列表的ProcessBuilder没有效果。
-
@Richard:在 Windows 上,没有将数组传递给目标应用程序的安全方法,除非您已经知道特定应用程序如何解析其命令行字符串。
标签: java linux windows runtime.exec spaces