java - ProcessBuilder 找不到文件?!

标签 java batch-file processbuilder

另一个问题很快接踵而至,但这一定是一个我没有看到的非常明显的错误。我在下面编写了一些代码来运行批处理文件,但我收到一条错误消息,提示它找不到该文件,但我可以向您保证该文件确实存在于目录中!

public class Pull {

public void pullData() throws IOException {
    ProcessBuilder pb = new ProcessBuilder("adb.bat");
    File f = new File("C:\\");
    pb.directory(f);
    Process p = pb.start();  
}

 public static void main(String[] args) throws IOException {
     Pull pull = new Pull();
     pull.pullData();
 }

这是错误信息

Exception in thread "main" java.io.IOException: Cannot run program "adb.bat" (in directory "C:\"): CreateProcess error=2, The system cannot find the file specified

最佳答案

我正在运行 Linux,但是当我运行您的代码(修改为运行 .sh 而不是 .bat)时出现同样的错误。

尝试:

ProcessBuilder pb = new ProcessBuilder("c:\\adb.bat");

显然,使用 ProcessBuilder.directory 不会影响构建器构建时选择的工作目录(用于发现可执行文件)(至少,这似乎是发生了什么。文档说它会更改工作目录,所以我猜输入/输出文件可能与此相关?)

我不确定它在内部实际做了什么,但在构造函数中提供可执行文件的路径解决了问题。

此帖talks about the problem and this solution ,但也会提出是否必须设置环境变量,其中类似“路径”的变量可能有助于帮助 ProcessBuilder 发现可执行文件。

关于java - ProcessBuilder 找不到文件?!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9847242/

相关文章:

windows - 将参数从 Powershell 传递到批处理脚本

batch-file - BAT文件: Open new cmd window and execute a command in there

java - 从 Java 运行 EXE

java - 将分钟转换为毫秒 Java/android

java - 使用google fit android api读取数据时获取 "Task is not yet complete error"

java - JSON 对象数组转 Java POJO

windows - 从批处理文件 (cmd) 控制交互式控制台程序

java - 使用 Java PrcoessBuilder 运行 Python 远程文件

java - 使用进程构建器或 apache commons exec 执行外部程序

java - Java 8 的 Oracle JVM 中物理存储的 'tz' 时区数据库在哪里?