java 呼叫cmd互動式執行命令並獲得執行結果
阿新 • • 發佈:2019-01-29
需求是這樣:需要呼叫cmd執行某個位置下的可執行程式,(具體我這裡是gtsstp.exe),首先可以通過Process的getOutputStream向其輸入命令,然後用InputStreamReader獲得執行結果。
這裡需要注意的是:因為讀取執行結果時是按行讀取br.readLine(),所以在需要輸入命令時,一定要newline()新加一行,否則不能繼續往下讀取後面的內容!!!
程式碼塊
程式碼如下:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
public class Cmd {
Process process;
public void CmdTest() throws IOException {
process=Runtime.getRuntime().exec("cmd");
new Thread(){
public void run() {
try {
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
bw.write("e:");
bw.newLine();
bw.write("cd E:\\Code\\AltaRicaWizard");
bw.newLine();//因為讀取時是一行行讀取的,不加newline無法繼續往下讀
bw .write("gtsstp.exe GTS.xml");
bw.newLine();
bw.write("print tr");
bw.newLine();
bw.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();;
new Thread() {
public void run() {
try {
BufferedReader br=new BufferedReader(new InputStreamReader(process.getInputStream()));
String cmdout="";
while ((cmdout=br.readLine())!=null) {
System.out.println(cmdout);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}.start();
}
public static void main(String[] args) throws IOException {
Cmd cmd=new Cmd();
cmd.CmdTest();
}
}