gpt4 book ai didi

java - 具有动态路径的 ProcessBuilder(可能带有空格)

转载 作者:行者123 更新时间:2023-12-02 07:35:02 24 4
gpt4 key购买 nike

我正在尝试从我的 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 运行可执行文件的正确方法是什么?

最佳答案

getResource("res") 返回 URI,它不是文件引用,getPath 返回该 的 URL 编码字符串URI 并且手动替换所有特殊符号是错误的方法。因此,让 java 自己找到该 URI 的正确路径

URL brokerURI = MqttServerInterface.class.getResource("broker/mosquitto.exe");
Path pathToBroker = Paths.get(brokerURI.toURI());
String brokerCommand = pathToBroker.toString();

关于java - 具有动态路径的 ProcessBuilder(可能带有空格),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31382154/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com