我有以下代碼:如何從java代碼中獲取控制檯命令的結果?
ProcessBuilder pb = new ProcessBuilder("dir"); // or cat in linux
Process p = pb.start();
p.waitFor();
String result = IOUtils.toString(p.getInputStream(), "UTF-8");
System.out.println(result);
它拋出
java.io.IOException: Cannot run program "dir": CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048) ~[na:1.8.0_111]
我明白,我可以寫這樣的事:
ProcessBuilder pb = new ProcessBuilder("test.bat");
和內部test.bat
你可以寫
dir
但它返回:
D:\nsd-rest>dir
Volume in drive D is SECOND
Volume Serial Number is CE52-8896
Directory of D:\nsd-rest
03/24/17 15:53 <DIR> .
03/24/17 15:53 <DIR> ..
03/24/17 12:00 249 .gitignore
03/24/17 16:54 <DIR> .idea
03/24/17 15:01 <DIR> .mvn
03/24/17 12:00 7,058 mvnw
03/24/17 12:00 5,006 mvnw.cmd
03/24/17 15:53 6,265 nsd-rest.iml
03/24/17 15:52 1,993 pom.xml
03/24/17 15:01 <DIR> src
03/24/17 15:19 <DIR> target
03/24/17 16:52 3 test.bat
6 File(s) 20,574 bytes
6 Dir(s) 587,412,844,544 bytes free
行
D:\nsd-rest>dir
是多餘的。
當我調用批處理文件,我覺得我做一些不正確。
你能提供正確的解決方案?
P.S.而不是dir
可以是任何可執行文件。
只是一個想法,爪哇可能無法訪問相同的環境變量作爲命令提示符。 (例如%PATH%) – CraigR8806
@ CraigR8806有沒有辦法將dir添加到路徑? – gstackoverflow
進程生成器的命令中的第一個參數被視爲可執行文件,從我所看到的情況來看,該規則沒有例外。你真正想要的是執行命令行進程,並將「dir」作爲第一個參數傳遞給該進程。 –