我试图通过使用
获取文件的位置来在与我的Jar文件相同的目录中执行进程private static File jarLocation = new File(Main.class.getProtectionDomain().getCodeSource().getLocation().getPath()).getParentFile();
然后调用
Runtime.getRuntime().exec("command", null, jarLocation);
这通常可以正常工作,但当路径中有空格时,我得到“目录名无效”。我试图添加一些调试代码,打印用“%20”替换空格的目录路径(我假设因为空间的ASCII十六进制是20)。有没有办法能够在其路径中使用带空格的目录?
答案 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看到讨论。