Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ProcessBuilder可以';找不到文件?!_Java_Batch File_Processbuilder - Fatal编程技术网

Java ProcessBuilder可以';找不到文件?!

Java ProcessBuilder可以';找不到文件?!,java,batch-file,processbuilder,Java,Batch File,Processbuilder,另一个问题接踵而至,但这肯定是一个我没有看到的非常明显的错误。我已经编写了一些代码来运行下面的批处理文件,但我收到一条错误消息,说它找不到该文件,但我可以向您保证,该文件确实存在于目录中 public class Pull { public void pullData() throws IOException { ProcessBuilder pb = new ProcessBuilder("adb.bat"); File f = new File("C:\\"); p

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

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.directory
不会影响构建生成器时选择的工作目录(用于发现可执行文件)(至少,这似乎是发生的事情。文档说它会更改工作目录,所以我猜输入/输出文件可能与此相关?)

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


这篇文章,但也提出了是否必须设置环境变量,其中类似于“路径”的变量可能有助于
ProcessBuilder
发现可执行文件。

请尝试在此处使用教程-。使用它,我对你的类做了一些修改,它找到了文件(注意,我不知道里面是什么,所以不能完全测试它)。它的编译和运行没有问题,而您自己的I遇到了与您相同的问题:

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();

 }


}

那么,adb.bat是c:\,对吗?试着把它或它的副本放在项目文件夹中也不行。我是否正确使用processbuilder?您是否尝试过将批处理文件的内容作为
processbuilder
的参数执行?例如,如果“adb.bat”执行类似于“java-version”的操作,您是否尝试过执行类似于
新ProcessBuilder(“java”、“-server”)
?我想知道Java是否试图将adb.bat视为可执行文件,即使它实际上只是一个基于文本的脚本。您是否尝试过在构造函数中包含路径(例如,
newProcessBuilder(“c:\\adb.bat”)
?请参阅在Linux上,如果
命令位于
目录中,并使用
ProcessBuilder
更改到该目录,则仅执行
命令将失败,但执行
/command
会起作用。因此,process builder正在更改到目录中,但需要具体执行ode>/command
在该目录中,除非该目录位于
$PATH
上。
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();

 }


}