解決方案--java執行cmd命令ProcessBuilder--出錯Exception in thread "main" java.io.IOException: Cannot run program "dir d:\": CreateProcess error=2(xjl456852原創)


當我嘗試在java中通過ProcessBuilder運行window的cmd命令時出現錯誤:
   
   
   
           
  1. public static void main(String [] args) throws IOException {
  2. ProcessBuilder builder = new ProcessBuilder();
  3. Process process = builder.command("dir d:\\").start();
  4. InputStream inputStream = process.getInputStream();
  5. BufferedReader br = new BufferedReader(new InputStreamReader(inputStream,"gb2312"));
  6. String line = null;
  7. while((line = br.readLine()) != null) {
  8. System.out.println(line);
  9. }
  10. }
出錯如下:
Exception in thread "main" java.io.IOException: Cannot run program "dir d:\": CreateProcess error=2, 系統找不到指定的文件。
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1047)
at com.xjl456852.processBuilder.ProcessBuilderTest.main(ProcessBuilderTest.java:25)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
Caused by: java.io.IOException: CreateProcess error=2, 系統找不到指定的文件。
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(ProcessImpl.java:385)
at java.lang.ProcessImpl.start(ProcessImpl.java:136)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1028)
... 6 more

即使我把第三行語句改為下面的,仍然出錯
   
   
   
           
  1. Process process = builder.command("cmd.exe /c dir d:\\").start();

后來我看許多人都遇到這種情況,但是沒有人說解決方案的,有人就直接放棄了:
所以我又試了各種方式,終於解決了這個問題,這兩種方案執行都沒有問題.提供給遇到這種問題的朋友一種參考
方法一:
   
   
   
           
  1. public static void main(String [] args) throws IOException {
  2. ProcessBuilder builder = new ProcessBuilder();
  3. List<String> list = new ArrayList<>();
  4. list.add("cmd.exe");
  5. list.add("/c");
  6. list.add("dir");
  7. list.add("d:\\");
  8. Process process = builder.command(list).start();
  9. InputStream inputStream = process.getInputStream();
  10. BufferedReader br = new BufferedReader(new InputStreamReader(inputStream,"gb2312"));
  11. String line = null;
  12. while((line = br.readLine()) != null) {
  13. System.out.println(line);
  14. }
  15. }
方法二:
   
   
   
           
  1. public static void main(String [] args) throws IOException {
  2. ProcessBuilder builder = new ProcessBuilder();
  3. Runtime runtime = Runtime.getRuntime();
  4. Process process = runtime.exec("cmd.exe /c dir d:\\");
  5. InputStream inputStream = process.getInputStream();
  6. BufferedReader br = new BufferedReader(new InputStreamReader(inputStream,"gb2312"));
  7. String line = null;
  8. while((line = br.readLine()) != null) {
  9. System.out.println(line);
  10. }
  11. }





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM