1. 程式人生 > >java 呼叫cmd互動式執行命令並獲得執行結果

java 呼叫cmd互動式執行命令並獲得執行結果

需求是這樣:需要呼叫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(); } }