无法通过网络找到解决方案,所以决定在这里问一下
我想要的是:我希望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?
答案 0 :(得分:1)
假设应用程序资源是实际文件是不可靠的。相反,使用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);
}
}