具有动态路径的 ProcessBuilder(可能带有空格)
ProcessBuilder with dynamic path (possibly with spaces)
我正在尝试从我的 Java 应用程序 运行 一个外部可执行文件。它驻留在该应用程序的包中,但该应用程序的路径可能会有所不同,并且可能包含空格。我试过:
String broker = MqttServerInterface.class.getResource("broker/mosquitto.exe").getPath();
System.out.println(broker);
ProcessBuilder pb = new ProcessBuilder(broker,"-p",port);
server = pb.start();
在没有空格的路径上工作正常。但是,当有空格时,它给出CreateProcess error=267,目录名无效。
我已经根据这里的建议重写了代码:ProcessBuilder cannot run bat file with spaces in path:
String brokerDir = MqttServerInterface.class.getResource("broker").getPath();
System.out.println(brokerDir);
ProcessBuilder pb = new ProcessBuilder("mosquitto.exe","-p",port);
pb.directory(new File(brokerDir));
pb.redirectError();
server = pb.start();
但是现在,我仍然得到路径中有空格的错误 267 和没有路径的错误 2(系统找不到指定的文件)。 运行 来自 Java 的可执行文件的正确方法是什么?
当您发表评论时,System.out.println(broker);
的结果显示如下:
/N:/dropbox/Dropbox/projects/robot%202.0/prophio%203/prophio3/build/classes/com/trobot/prophio3/broker/mosquitto.exe
这看起来像一个 URL 编码的 URI,它不是文件路径,如其中出现的 %20
所示。解决此问题的一种方法是将它们替换为实际空格,例如:
broker = broker.replace("%20", " ");
getResource("res")
returns URI
不是文件引用,getPath
returns URI
的 URL 编码字符串和它手动替换所有特殊符号是错误的方法。所以让 java 自己找到 URI
的正确路径
URL brokerURI = MqttServerInterface.class.getResource("broker/mosquitto.exe");
Path pathToBroker = Paths.get(brokerURI.toURI());
String brokerCommand = pathToBroker.toString();
我正在尝试从我的 Java 应用程序 运行 一个外部可执行文件。它驻留在该应用程序的包中,但该应用程序的路径可能会有所不同,并且可能包含空格。我试过:
String broker = MqttServerInterface.class.getResource("broker/mosquitto.exe").getPath();
System.out.println(broker);
ProcessBuilder pb = new ProcessBuilder(broker,"-p",port);
server = pb.start();
在没有空格的路径上工作正常。但是,当有空格时,它给出CreateProcess error=267,目录名无效。
我已经根据这里的建议重写了代码:ProcessBuilder cannot run bat file with spaces in path:
String brokerDir = MqttServerInterface.class.getResource("broker").getPath();
System.out.println(brokerDir);
ProcessBuilder pb = new ProcessBuilder("mosquitto.exe","-p",port);
pb.directory(new File(brokerDir));
pb.redirectError();
server = pb.start();
但是现在,我仍然得到路径中有空格的错误 267 和没有路径的错误 2(系统找不到指定的文件)。 运行 来自 Java 的可执行文件的正确方法是什么?
当您发表评论时,System.out.println(broker);
的结果显示如下:
/N:/dropbox/Dropbox/projects/robot%202.0/prophio%203/prophio3/build/classes/com/trobot/prophio3/broker/mosquitto.exe
这看起来像一个 URL 编码的 URI,它不是文件路径,如其中出现的 %20
所示。解决此问题的一种方法是将它们替换为实际空格,例如:
broker = broker.replace("%20", " ");
getResource("res")
returns URI
不是文件引用,getPath
returns URI
的 URL 编码字符串和它手动替换所有特殊符号是错误的方法。所以让 java 自己找到 URI
的正确路径
URL brokerURI = MqttServerInterface.class.getResource("broker/mosquitto.exe");
Path pathToBroker = Paths.get(brokerURI.toURI());
String brokerCommand = pathToBroker.toString();