2017-02-18 203 views
0

我想編寫一個可在Windows CMD中執行命令的Java代碼。使用Java代碼在Windows上使用CMD執行命令

我通過網站看了一下,發現瞭如何發送和單個請求工作。例如,創建新的進程和執行(「cmd/c目錄」),然後使用輸入流我可以得到顯示的答案。

如何打開CMD的過程中,讓用戶輸入cmd命令?

例如,我打開應用程序,它直接打開CMD進程,那麼用戶可以鍵入「目錄」,得到的輸出。

再次輸入「cd ../../」 後再輸入「dir」,然後用新路徑包含得到輸出。

如果它可以執行那麼該怎麼做呢?或者爲了執行這個需要每次打開一個新進程並執行(「cmd/c some_reqests」)?

+0

只需使用控制檯獲取輸入,然後使用用戶輸入來啓動exec進程。 – Jimmy

回答

0

有趣的問題,你實際上可以調用cmd一個新的進程,並使用標準輸入和標準輸出來處理數據。

棘手的部分當從命令流已經結束是知道。

要做到這一點我用命令(dir && echo _end_)之後呼應的字符串。

在實踐中,我認爲這將是最好只啓動一個進程的每一個任務。

public class RunCMD { 

    public static void main(String[] args) { 
     try { 
      Process exec = Runtime.getRuntime().exec("cmd"); 
      OutputStream outputStream = exec.getOutputStream(); 
      InputStream inputStream = exec.getInputStream(); 
      PrintStream printStream = new PrintStream(outputStream); 
      BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream,"utf-8")); 
      printStream.println("chcp 65001"); 
      printStream.flush(); 
      printStream.println("dir && echo _end_"); 
      printStream.flush(); 


      for(String line=reader.readLine();line!=null;line=reader.readLine()){ 
       System.out.println(line); 
       if(line.equals("_end_")){ 
        break; 
       } 
      } 

      printStream.println("exit"); 
      printStream.flush(); 

      for(String line=reader.readLine();line!=null;line=reader.readLine()){ 
       System.out.println(line); 
      } 

     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

}