ProcessBuilder找不到文件?!

时间:2012-03-23 22:23:38

标签: 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

2 个答案:

答案 0 :(得分:11)

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

尝试:

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

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

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

这篇文章talks about the problem and this solution,但也提出是否必须设置环境变量,其中“路径”类变量可能对帮助ProcessBuilder发现可执行文件有用。

答案 1 :(得分:2)

您好在这里尝试使用教程 - http://www.javabeat.net/examples/2007/08/21/using-the-new-process-builder-class/。使用它我已经改变了你的类,它找到了文件(请注意,我不知道里面是什么,所以不能完全测试它)。它编译并运行没有问题,而你自己遇到的问题与你一样:

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(); 
    */
    ProcessBuilder p = new ProcessBuilder("C:\\adb.bat");
     p.start();
    System.out.println(p.toString());
}


 public static void main(String[] args) throws IOException {


     Pull pull = new Pull();
     pull.pullData();

 }


}