使用 Java 調用 cmd 命令


使用 java 調用 cmd 命令時,使用如下的代碼(不需要導入其他庫) 

Runtime.getRuntime().exec(command); //command是需要運行的命令

但是呢,這樣是運行不了的,要進行異常處理,或者將其拋出:

//這里選擇異常處理
try {
	Runtime.getRuntime().exec(command);
} catch (IOException e1) { // 改自己的異常類
	e1.printStackTrace();
}

 

現在,可以運行exe文件,但是若運行 gpedit.msc devmgmt.msc 等工具無反應

解決辦法是,設定cmd的運行模式(這不是java的語法,是cmd的程序參數):

#轉至https://blog.csdn.net/liuyukuan/article/details/5974517
cmd /c command 執行完命令后關閉命令窗口。 
cmd /k command 執行完命令后不關閉命令窗口。 
cmd /c start command 會打開一個新窗口后執行命令,原窗口會關閉。 
cmd /k start command 會打開一個新窗口后執行命令,原窗口不會關閉。

將命令改變后,就可以正常使用會彈出新窗口的工具了

但是,如果要調用出命令行及沒有圖型界面的工具或程序,則要用后面兩個命令,不然不會彈出。

例如:

Runtime.getRuntime().exec("cmd /c  powershell");       // 無反應
Runtime.getRuntime().exec("cmd /c  start powershell"); // 成功調出powershell

個人理解是: java會在后台運行一個終端,然后再運行輸入的代碼,但是這個終端是不會到前台的,所以沒圖形界面的程序雖然能運行,但是無法顯示.

 

等等,那要怎么獲取命令的返回值呢?

首先,Runtime.getRuntime().exec()會返回被調用的進程,我們需要獲取這個進程

接着,再通過輸入流,讓java程序讀取被調用程序的返回值,再將其輸出便可

例如:

/* 記得引入java.io中的相關包 */
// 獲取進程
Process process = Runtime.getRuntime().exec("cmd /c dir"); // 運行dir命令
// 獲取進程的輸入流 流的方向為(喚醒的進程 -> java程序)
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
// 若讀取當前行不為空,就將其輸出
while ((line = reader.readLine()) != null) {
	System.out.println(line);
}
// 將流關閉,避免浪費系統資源
reader.close();

此時,java程序就會打印出DIR命令的執行結果

但是注意,cmd不能加start參數,因為加上了會創建新的終端執行,java就得不到執行結果了

 

總結:

1.  java運行可執行文件,隨意使用任意一種cmd運行方式

2.  執行 *.msc 類文件,cmd要加上start參數(也就是后兩種運行模式之一)開啟新窗口.

3.  想要得到運行的返回值,要先獲取到進程,再得到它的輸入流,並且cmd不能加上start參數,否則會在新的終端窗口執行.

 

個人感覺是:帶GUI程序任意,終端程序后兩種,要得到返回值的話前兩種

 

補充:

學生黨,單純做筆記使用,若有不足之處請指正,感激不盡!


免責聲明!

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



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