標籤:批次檔 批處理 java cmd exe
Java調用Windows命令 Java調用Windows命令主要用到兩個類: java.lang.Runtime
每個 Java 應用程式都有一個 Runtime 類執行個體,使應用程式能夠與其啟動並執行環境相串連。可以通過 getRuntime 方法擷取當前運行時。應用程式不能建立自己的 Runtime 類執行個體。 java.lang.Process
ProcessBuilder.start() 和 Runtime.exec 方法建立一個本機進程,並返回 Process 子類的一個執行個體,該執行個體可用來控制進程並擷取相關資訊。Process 類提供了執行從進程輸入、執行輸出到進程、等待進程完成、檢查進程的退出狀態以及銷毀(殺掉)進程的方法。 對於帶有 Process 對象的 Java 進程,沒有必要非同步或並發執行由 Process 對象表示的進程。
下面是個簡單例子:
package test;import java.io.IOException;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;/** * Java調用Windows命令測試 * @author liuyazhuang * */public class Test {public static void main(String args[]) { testWinCmd(); dirOpt(); } public static void testWinCmd() { System.out.println("------------------testWinCmd()--------------------"); Runtime runtime = Runtime.getRuntime(); System.out.println(runtime.totalMemory()); System.out.println(runtime.freeMemory()); System.out.println(runtime.maxMemory()); System.out.println(runtime.availableProcessors()); //處理器數 try { //執行一個exe檔案 runtime.exec("notepad"); runtime.exec("C:\\Program Files\\Microsoft Office\\OFFICE11\\winword.exe c:\\test.doc"); //執行批處理 runtime.exec("c:\\x.bat"); //執行系統命令 runtime.exec("cmd /c dir "); runtime.exec("cmd /c dir c:\\");// //-------------- 檔案操作 -------------- runtime.exec("cmd /c copy c:\\x.bat d:\\x.txt"); //copy並改名 runtime.exec("cmd /c rename d:\\x.txt x.txt.bak"); //重新命名 runtime.exec("cmd /c move d:\\x.txt.bak c:\\"); //移動 runtime.exec("cmd /c del c:\\x.txt.bak"); //刪除 //-------------- 目錄操作 -------------- runtime.exec("cmd /c md c:\\_test"); //刪除 } catch (IOException e) { e.printStackTrace(); } } /** * 執行批次檔,並擷取輸出資料流重新輸出到控制台 */ public static void dirOpt() { System.out.println("------------------dirOpt()--------------------"); Process process; try { //執行命令 process = Runtime.getRuntime().exec("c:\\x.bat"); //取得命令結果的輸出資料流 InputStream fis = process.getInputStream(); //用一個讀輸出資料流類去讀 BufferedReader br = new BufferedReader(new InputStreamReader(fis)); String line = null; //逐行讀取輸出到控制台 while ((line = br.readLine()) != null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } }}
x.bat
del c:\del.txtcd D:dir
運行結果:
------------------testWinCmd()--------------------20316161652120666501122------------------dirOpt()--------------------D:\_dev_stu\fileopt>del c:\del.txt D:\_dev_stu\fileopt>cd D: D:\_dev_stu\fileoptD:\_dev_stu\fileopt>dir磁碟機 D 中的卷是 DISK1_VOL2卷的序號是 70FB-DFAFD:\_dev_stu\fileopt 的目錄2008-07-18 09:30 <DIR> .2008-07-18 09:30 <DIR> ..2008-07-18 09:30 <DIR> src2008-07-18 09:31 549 fileopt.iml2008-07-18 09:31 10,292 fileopt.ipr2008-07-18 14:27 <DIR> classes2008-07-18 16:42 26,265 fileopt.iws 3 個檔案 37,106 位元組 4 個目錄 8,095,498,240 可用位元組Process finished with exit code 0
Java調用Windows命令