標籤:
原理:java的Runtime.getRuntime().exec(commandText)可以調用執行cmd指令。
cmd /c dir 是執行完dir命令後關閉命令視窗。
cmd /k dir 是執行完dir命令後不關閉命令視窗。
cmd /c start dir 會開啟一個新視窗後執行dir指令,原視窗會關閉。
cmd /k start dir 會開啟一個新視窗後執行dir指令,原視窗不會關閉。
注:增加了start,就會開啟新視窗,可以用cmd /?查看協助資訊。
如下舉例:
1、從D盤copy一份檔案到E盤。
public static void main(String[] args) {
try {
String cmdStr = "cmd /c copy d:\\test.txt e:\\" ;
Runtime.getRuntime().exec(cmdStr);
}catch(Exception e){
e.printStackTrace();
}
}
註:這裡d盤下的目錄要用\\,若用d:/test.txt則會理解成同/c一樣的命令,而找不到檔案路徑;故這裡可以用file.getAbsolutePath();
2、刪除一個檔案(注意是單個檔案,非檔案夾)。這裡以上面copy到e盤的test.txt檔案為例。
public static void main(String[] args) {
try {
String cmdStr = "cmd /c del e:\\test.txt" ;
Runtime.getRuntime().exec(cmdStr);
}catch(Exception e){
e.printStackTrace();
}
}
3、強制移除e:/test檔案夾下的所有檔案夾及檔案
public static void main(String[] args) {
try {
String cmdStr = "cmd /c rd/s/q e:\\test" ;
Runtime.getRuntime().exec(cmdStr);
}catch(Exception e){
e.printStackTrace();
}
}
注:這裡主要是“rd/s/q”起到了作用,這樣無論test裡面有幾層檔案夾,檔案夾下有多少檔案,都統統被強制移除了。
調用系統命令,使用如下的一行代碼:
Process process = Runtime.getRuntime().exec("cmd /c copy d:\\test.txt e:");
其中,方法exec的參數就是你要調用的具體系統命令。因為copy本身不是一個可執行檔exe檔案,因此需要在前面添加cmd /c來啟動一個控制台應用程式。而若要運行一個可執行程式,如執行我在F盤下的tomcat安裝檔案,將命令寫為:String cmdStr = "F:\\apache-tomcat-6.0.20.exe";
調用批處理代碼:
public static void main(String[] args) {
String path = "D:\\public.bat";
Runtime run = Runtime.getRuntime();
try {
Process process = run.exec("cmd.exe /k start " + path);
//將調用結果列印到控制台上
InputStream in = process.getInputStream();
while (in.read() != -1) {
System.out.println(in.read());
}
in.close();
process.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
}
參考:http://blog.163.com/[email protected]/blog/static/1406291232012575743301/
Java 調用cmd.exe命令