... JAVA如何調用DOS命令2007-12-03 來自:conanpaul 用Java編寫應用時,有時需要在程序中調用另一個現成的可執行程序或系統命令,這時可以通過組合使用Java提供的Runtime類和Process類的方法實現。下面是一種比較典型的程序模式: Process process = Runtime.getRuntime().exec(".\\p.exe"); process.waitfor( ); ... 在上面的程序中,第一行的“.\\p.exe”是要執行的程序名,Runtime.getRuntime()返回當前應用程序的Runtime對象,該對象的exec()方法指示Java虛擬機創建一個子進程執行指定的可執行程序,並返回與該子進程對應的Process對象實例。通過Process可以控制該子進程的執行或獲取該子進程的信息。第二條語句的目的等待子進程完成再往下執行。 但在windows平臺上,如果處理不當,有時並不能得到預期的結果。下面是筆者在實際編程中總結的幾種需要注意的情況: 1、執行DOS的內部命令 如果要執行一條DOS內部命令,有兩種方法。一種方法是把命令解釋器包含在exec()的參數中。例如,執行dir命令,在NT上, 可寫成exec("cmd.exe /c dir"),在windows 95/98下,可寫成“command.exe /c dir”,其中參數“/c”表示命令執行後關閉Dos立即關閉窗口。另一種方法是,把內部命令放在一個批命令my_dir.bat文件中,在Java程序中寫成exec("my_dir.bat")。如果僅僅寫成exec("dir"),Java虛擬機則會報運行時錯誤。前一種方法要保證程序的可移植性,需要在程序中讀取運行的操作系統平臺,以調用不同的命令解釋器。後一種方法則不需要做更多的處理。 2、打開一個不可執行的文件 打開一個不可執行的文件,但該文件存在關聯的應用程序,則可以有兩種方式。 以打開一個word文檔a.doc文件爲例,Java中可以有以下兩種寫法: exec("start .\\a.doc"); exec(" c:\\Program Files\\Microsoft Office\\office\\winword.exe .\\a.doc"); 顯然,前一種方法更爲簡捷方便。 3、執行一個有標準輸出的DOS可執行程序 在windows平臺上,運行被調用程序的DOS窗口在程序執行完畢後往往並不會自動關閉,從而導致Java應用程序阻塞在waitfor( )。導致該現象的一個可能的原因是,該可執行程序的標準輸出比較多,而運行窗口的標準輸出緩衝區不夠大。解決的辦法是,利用Java提供的Process類提供的方法讓Java虛擬機截獲被調用程序的DOS運行窗口的標準輸出,在waitfor()命令之前讀出窗口的標準輸出緩衝區中的內容。一段典型的程序如下: ... String ls_1; Process process = Runtime.getRuntime().exec("cmd /c dir \\windows"); BufferedReader bufferedReader = new BufferedReader( \ new InputStreamReader(process.getInputStream()); while ( (ls_1=bufferedReader.readLine()) != null) System.out.println(ls_1); process.waitfor( ); ... 以上內容爲轉載~下面內容爲原創! 今天在做客戶端程序的自動更新,簡單描述一下,就是從服務器上將更新包下載下來,然後在本地解壓縮,最後刪掉~功能很簡單~ 但是問題出在使用JAVA的ZIP模塊做文件的解壓縮不是想象的那麼簡單,資源需要釋放,一個不小心就沒有辦法刪除掉原有ZIP文件了~資源的佔用確實是個大問題,但是好在,客戶端程序更新完是要重啓的,一切都煙消雲散了~對於刪除不掉ZIP文件的問題,我也流氓一下~用DEL硬刪除~此處一定要注意! Process process = Runtime.getRuntime().exec("cmd /c del f:\\aaa.doc"); 這樣的調用是沒有問題~ Process process = Runtime.getRuntime().exec("del f:\\aaa.doc"); 這樣寫是不可能對的~
java調用命令
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
跨越雲端,華爲雲技術專家分享高效跨雲遷移實踐
原創
2024-06-06 10:56:54
一文搞懂5種內存溢出案例,內含完整源碼
原創
2024-06-05 10:56:55
破除軟件開發困局,基於容器平臺的DevOps轉型實踐
原創
2024-06-03 10:59:23
乾貨收藏!Calico的BGP RouteReflector策略實踐
原創
2024-05-29 22:58:38
構建強韌:愛奇藝VRS系統可用性建設實踐
原創
2024-05-28 02:22:00
IO密集型場景CompletableFuture使用的陷阱
原創
2024-05-21 23:11:05
你咋不上天?上了!歐洲航天局的Zabbix應用
原創
2024-05-15 22:35:22
網絡現代化 通向雲原生應用的高速公路
osc_5rzx0ke2
2024-05-14 00:46:31
PXE配合Kickstart無人值守——批量裝機簡單如喝水(詳細)
osc_12m05m5l
2024-05-14 00:19:25
面試官:說說你對序列化的理解
osc_61miaq6u
2024-05-13 22:58:28
CCE雲原生混部場景下的測試案例
原創
2024-05-07 10:33:03
頻繁FullGC線上問題排查
原創
2024-05-06 23:55:18
Linux下製作Nginx綠色免安裝包
原創
2024-04-29 21:38:23
Sealos 雲主機正式上線,便宜,便宜,便宜!
原創
2024-04-26 21:14:40