gpt4 book ai didi

java - 使用 ProcessBuilder 执行本地可执行文件

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

无法通过网络找到解决方案,所以决定在这里询问

我有一个such structure of a project

我想要什么:我希望 ProcessBuilder 使用我本地的 adb.exe

例如我的 ProcessBuilder 的 String[]:

case "devicesListString":
String[] devicesListString = {"./adb.exe","devices"};
return devicesListString;

这就是 ProcessBuilder 的启动方式

public Process initNewProcessBuilderOnProcess(Tab tab, String[] str) throws IOException {
ProcessBuilder vr = new ProcessBuilder(str);
vr.directory(new File(System.getProperty("user.dir")));
vr.redirectErrorStream(true);
Process pr = vr.start();
tabAndProcessMap.put(tab, pr);
return pr;
}

已添加 vr.directory,但没有结果。如何访问我的 adb.exe 资源?也许我需要别的东西,而不是 ProcessBuilder?

最佳答案

假设应用程序资源是实际文件是不可靠的。相反,使用 Java 的 getResource* 方法之一来读取资源,并将其复制到实际文件中:

Path adb = Files.createTempFile("adb", ".exe");

try (InputStream stream = Testinghelper.class.getResourceAsStream("adb.exe")) {
Files.copy(stream, adb, StandardCopyOption.REPLACE_EXISTING);
}

ProcessBuilder builder = new ProcessBuilder(adb.toString(), "devices");

在 Windows 以外的操作系统上,可能需要先使新文件可执行,然后再将其传递给 ProcessBuilder:

PosixFileAttributeView view =
Files.getFileAttributeView(adb, PosixFileAttributeView.class);
if (view != null) {
Set<PosixFilePermission> perms = view.readAttributes().permissions();
if (perms.add(PosixFilePermission.OWNER_EXECUTE)) {
view.setPermissions(adb, perms);
}
}

关于java - 使用 ProcessBuilder 执行本地可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43870681/

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