java如何實現了cmd多條命令交互操作?
在java中調用操作系統的程序時,可以使用java.lang.Runtime.getRuntime().exec() 來實現,但是這個方法在調用命令后就直接返回當前線程了;程序設計時,有時候需要在等待調用的系統程序完成操作后,當前線程才能做下一步操作,此時可以用類Process的方法waitFor()來實現,它會阻塞當先線程直至調用程序運行結束java.lang.Process process = java.lang.Runtime.getRuntime().exec("");//執行命令生成cube try {
process.waitFor();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
proc_stat = checkFileSize() ? "1" : "3";
[java] view plain copyjava.lang.Process process = java.lang.Runtime.getRuntime().exec("");//執行命令生成cube
try {
process.waitFor();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
proc_stat = checkFileSize() ? "1" : "3";
Process的方法waitFor()介紹,取自API文檔:
waitFor
public abstract int waitFor()
throws InterruptedException導致當前線程等待,如果必要,一直要等到由該 Process 對象表示的進程已經終止。如果已終止該子進程,此方法立即返回。如果沒有終止該子進程,調用的線程將被阻塞,直到退出子進程。
返回:
進程的出口值。根據慣例,0 表示正常終止。
拋出:
InterruptedException - 如果當前線程在等待時被另一線程 中斷,則停止等待,拋出 InterruptedException。
自我實踐:
執行多條cmd命令
String cmd = "cmd /c G: && cd G:\\projects\\testProject && start mvn package";
Process process = Runtime.getRuntime().exec(cmd);
process.waitFor();
process.exitValue() ;
這樣可以執行多條命令。
值得注意的是:執行 start mvn package,會開啟窗口,調用process.waitFor(),主線程不會被阻塞,而是會返回執行成功process.exitValue() == 0
將start mvn package中start去掉后,主線程就會阻塞,直到cmd命令開啟的子進程執行完畢,然后執行主線程。