簡體   English   中英

ProcessBuilder找不到文件?!

[英]ProcessBuilder can't find file?!

快速連續的另一個問題,但這是一個我沒有看到的非常明顯的錯誤。 我已經編寫了一些代碼來運行下面的批處理文件,但是我收到一條錯誤消息,說它無法找到該文件,但我可以向您保證該文件確實存在於該目錄中!

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不會影響構建構建器時選擇的工作目錄( 用於發現可執行文件 )(至少,這似乎發生了什么。文檔說它會更改工作目錄,所以我猜輸入/輸出文件可能是相對的?)

我不確定它在內部實際做了什么,但是在構造函數中提供可執行文件的路徑可以解決問題。

這篇文章討論了問題和這個解決方案 ,但也提出了是否必須設置環境變量,其中“路徑”類變量可能對幫助ProcessBuilder發現可執行文件有用。

您好,請嘗試使用此處的教程 - 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();

 }


}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM