2013-07-15 51 views
0

我有一個名爲Blockland.exe運行.exe程序。它使用了一個名爲TorqueScript的遊戲引擎,但它是一個控制檯應用程序,我認爲它使用C++來使它成爲一個應用程序。人們已經制作了一些流式傳輸blockland.exe控制檯的程序,但無處可查。在Java中,我怎麼讀通過的運行另一個控制檯應用程序的在線內容系?

在一般情況下,你會怎麼得到另一個運行控制檯應用程序的輸出?一旦我得到的線,我知道怎麼做,我需要用它做的,但我將如何得到使用Java控制檯應用程序的輸出?

回答

0

在Java ProcessBuilder提供一種方式來執行外部操作系統命令和管的輸入和從外部命令讀取輸出。這裏是做一個樣本:

List<String> command = new ArrayList<String>(); 
command.add("/path/to/Blockland.exe"); 
command.add("Other arguments"); 
ProcessBuilder procBuilder = new ProcessBuilder(command); 
Process proc = procBuilder.start(); 

ProcessOutputReader outputReader = 
    new ProcessOutputReader(proc.getInputStream()); 
ProcessOutputReader errorReader = 
    new ProcessOutputReader(proc.getErrorStream()); 

Thread out = new Thread(outputReader); 
out.start(); 

Thread error = new Thread(errorReader); 
error.start(); 

proc.waitFor(); 

哪裏ProcessOutputReader是實現Runnable類。它從構造函數中提供的流開始讀取,直到文件結束髮生在流中。這是可以讀取輸出並處理它的線程。請注意,您必須使用單獨的線程處理流,因爲java/OS爲子進程提供的緩衝區是有限的。如果子進程開始在數據流中輸入太多的數據(錯誤/輸出)並且緩衝區變滿,它將掛起。

例如,它可能看起來像(執行不完整):

public class ProcessOutputReader 
{ 
    public void run() 
    { 
     int ch; 

     try 
     { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(inpStream)); 
      // The output can be of any size. So read in chunks 
      String line = reader.readLine(); 
      while(line != null) 
      { 
       // handle line 
       line = reader.readLine(); 
      } 

     } 
     catch (Exception e) 
     { 
      // handle exceptions 
     } 
    } 
} 
+0

如果你說//處理輸出,我想知道你怎麼可以按行 – Pacnet

+0

這些數字字符轉換成可讀的字符串,行如果你想逐行閱讀,你可以使用'BufferedInputStream'。編輯我的答案來反映這一點。 – Venkat

相關問題