您好,登錄后才能下訂單哦!
這篇文章主要介紹了Java怎么執(zhí)行cmd命令及要注意哪些事項的相關(guān)知識,內(nèi)容詳細(xì)易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Java怎么執(zhí)行cmd命令及要注意哪些事項文章都會有所收獲,下面我們一起來看看吧。
通常 Java 執(zhí)行 Windows 或者 Linux 的命令時,都是使用 Runtime.getRuntime.exec(command) 來執(zhí)行的
public static void execCommand() { try { Runtime runtime = Runtime.getRuntime(); // 打開任務(wù)管理器,exec方法調(diào)用后返回 Process 進程對象 Process process = runtime.exec("cmd.exe /c taskmgr"); // 等待進程對象執(zhí)行完成,并返回“退出值”,0 為正常,其他為異常 int exitValue = process.waitFor(); System.out.println("exitValue: " + exitValue); // 銷毀process對象 process.destroy(); } catch (IOException | InterruptedException e) { e.printStackTrace(); } }
public static void execCommandAndGetOutput() { try { Runtime runtime = Runtime.getRuntime(); Process process = runtime.exec("cmd.exe /c ipconfig"); // 輸出結(jié)果,必須寫在 waitFor 之前 String outStr = getStreamStr(process.getInputStream()); // 錯誤結(jié)果,必須寫在 waitFor 之前 String errStr = getStreamStr(process.getErrorStream()); int exitValue = process.waitFor(); // 退出值 0 為正常,其他為異常 System.out.println("exitValue: " + exitValue); System.out.println("outStr: " + outStr); System.out.println("errStr: " + errStr); process.destroy(); } catch (IOException | InterruptedException e) { e.printStackTrace(); } } public static String getStreamStr(InputStream is) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(is, "GBK")); StringBuilder sb = new StringBuilder(); String line; while ((line = br.readLine()) != null) { sb.append(line); sb.append("\n"); } br.close(); return sb.toString(); }
process對象可以通過操作數(shù)據(jù)流,對執(zhí)行的命令進行參數(shù)輸入、獲取命令輸出結(jié)果、獲取錯誤結(jié)果
getInputStream() | 獲取process進程的輸出數(shù)據(jù) |
---|---|
getOutputStream() | 獲取process進程的輸入數(shù)據(jù) |
getErrorStream() | 獲取process進程的錯誤數(shù)據(jù) |
getInputStream() 為什么是獲取輸出數(shù)據(jù)?getOutputStream()為什么是獲取輸入數(shù)據(jù)?這是因為 input 和 output 是__針對當(dāng)前調(diào)用 process 的程序而言的__,即
要獲取命令的輸出結(jié)果,就是被執(zhí)行命令的結(jié)果 輸入到我們自己寫的程序中,所以用getInputStream()
要往別的程序輸入數(shù)據(jù),就是我們程序要輸出,所以此時用getOutputStream()
在java編程中,有時候我們只需要使用自己的程序或者調(diào)用第三方插件就可以完成一些工作,但是因為個人突發(fā)奇想,雖然cmd命令玩的不是很差,但是是否可以直接將命令寫到j(luò)ava程序中,在自己的程序中進行對電腦內(nèi)部的一個控制呢?舉個例子可能更方便理解,因為晚上要下載資源文件,但是我又想睡覺,那么電腦一直開著不僅僅對電腦有損耗,而且可能影響我的睡眠質(zhì)量,雖然我知道cmd的設(shè)置關(guān)機命令,但是我可以寫一個java可執(zhí)行片段,然后用這個來進行對電腦的定時關(guān)機操作,這樣以后我如果需要設(shè)置關(guān)機就可以直接調(diào)用自己的程序了,雖然市面上有專門的小工具,但是自己寫的東西總會帶來一點小傲嬌。具體的操作希望大家自行研究,但是要知道cmd命令可以做很多的事情,所以如何合理的在java中使用cmd命令是很有趣的:
public static void main(String[] args) { /*獲取cmd命令*/ try { Process pro = Runtime.getRuntime().exec("cmd /c calc"); //添加要進行的命令,"cmd /c calc"中calc代表要執(zhí)行打開計算器,如何設(shè)置關(guān)機請自己查找cmd命令 BufferedReader br = new BufferedReader(new InputStreamReader(pro .getInputStream())); //雖然cmd命令可以直接輸出,但是通過IO流技術(shù)可以保證對數(shù)據(jù)進行一個緩沖。 String msg = null; while ((msg = br.readLine()) != null) { System.out.println(msg); } } catch (IOException exception) { } /*cmd /c dir 是執(zhí)行完dir命令后關(guān)閉命令窗口 cmd /k dir 是執(zhí)行完dir命令后不關(guān)閉命令窗口 cmd /c start dir 會打開一個新窗口后執(zhí)行dir命令,原窗口會關(guān)閉 cmd /k start dir 會打開一個新窗口后執(zhí)行dir命令,原窗口不會關(guān)閉 cmd /? 查看幫助信息*/ }
在這里要提醒大家的是,cmd命令融合到程序中有時候往往是有些實際用途的,比如我的項目中要求一旦用戶做了某種操作就需要關(guān)機,那么這就是一種簡單的使用。
關(guān)于“Java怎么執(zhí)行cmd命令及要注意哪些事項”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“Java怎么執(zhí)行cmd命令及要注意哪些事項”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。