[英]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.