Runtime.exec()失败,目录中有空格(Java)

时间:2014-12-02 03:29:50

标签: java runtime.exec

我试图通过使用

获取文件的位置来在与我的Jar文件相同的目录中执行进程
private static File jarLocation = new File(Main.class.getProtectionDomain().getCodeSource().getLocation().getPath()).getParentFile();

然后调用

Runtime.getRuntime().exec("command", null, jarLocation);

这通常可以正常工作,但当路径中有空格时,我得到“目录名无效”。我试图添加一些调试代码,打印用“%20”替换空格的目录路径(我假设因为空间的ASCII十六进制是20)。有没有办法能够在其路径中使用带空格的目录?

1 个答案:

答案 0 :(得分:1)

getPath()调用URL.getPath(),不会返回文件系统路径。它返回URL的路径部分。对于file: URL,它将是URL编码的本地文件系统路径。如果该原始URL实际上是file: URL,则需要使用URI和URL类或自定义字符串处理将其转换为Runtime.exec()可以使用的本地文件系统路径。 / p>

这可能直接适用于您的情况。

File jarLocation = Paths.get(Main.class.getProtectionDomain().getCodeSource().getLocation().toURI()).toFile();

您还可以在Converting Java file:// URL to File(...) path, platform independent, including UNC paths看到讨论。