ProcessBuilder找不到文件?!

Roo*_*kie 8 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();
 }
Run Code Online (Sandbox Code Playgroud)

}

这是错误信息

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
Run Code Online (Sandbox Code Playgroud)

Ash*_*Ash 11

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

尝试:

ProcessBuilder pb = new ProcessBuilder("c:\\adb.bat");
Run Code Online (Sandbox Code Playgroud)

显然,使用ProcessBuilder.directory不影响工作目录(用于发现可执行文件的目的)构建的建设者时选择(至少,那是什么似乎发生.该文档说,这将改变工作目录,所以我想输入/输出文件可能是相对的?)

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

这篇文章讨论了问题和这个解决方案,但也提出了是否必须设置环境变量,其中"路径"类变量可能有助于ProcessBuilder发现可执行文件.

  • 在Linux上,如果命令位于目录中,并使用ProcessBuilder切换到该目录,则仅在执行命令时会失败,但执行./command可能会起作用。因此,流程生成器将切换到该目录,但是除非该目录位于$ PATH上,否则需要在该目录中专门执行./command。 (2认同)