2011-11-03 41 views
0

我想返回當我手動輸入命令到Windows中的cmd提示符時返回的相同文本。這裏有一個例子,不是的工作。從Java返回Windows cmd文本?

import java.io.IOException; 

public class Test { 

    public static void main(String[] args) throws IOException { 
     String g = ""; 
     Runtime.getRuntime().exec(new String[] {"ipconfig", g}); 
     System.out.println(g); 
    } 
} 

我不知道我是否應該尋找到Runtime.getRuntime()exec因爲我明白了API(http://download.oracle.com/javase/1.4.2/docs/api/java/lang/Runtime.html)的方式是,所有的高管例子中,沒有返回一個字符串。返回值(如果我明白的話)實際上是一個'進程',我只能用猜想意味着什麼都不會返回,但是這個過程開始了。我在示例中使用了ipconfig,但實際上我需要運行各種診斷命令並分析字符串(我稱之爲「cmd提示符」)。

回答

2

要捕獲命令的輸出,則可以使用此:

Process p = Runtime.getRuntime().exec(new String[] {"ipconfig", g}); 
InputStream s = p.getInputStream(); 

BufferedReader in = new BufferedReader(new InputStreamReader(s)); 
String temp; 

while ((temp = in.readLine()) != null) { 
    System.out.println(temp); 
} 

請不使的readLine()方法將阻塞,直到它讀輸入或處理終止。

+0

謝謝。我如何輸出getOutputStream()? –

+1

如何分配'InputStream s = p.getOutputStream();'。這是錯誤的。 – gigadot

+0

哎呀,我忘了... – Sibbo

2

Java字符串是不可變的,這意味着g引用的""永遠不會改變。沒有執行g任務的代碼將不會向System.out輸出空字符串以外的內容。

與其使用Runtime.exec,我建議您使用Apache Commons項目中的Commons-Exec庫。它提供了一個更可靠的方法來執行外部應用程序(可靠地傳遞參數並防止未讀取的輸出流鎖定程序等)。

您可以使用PumpStreamHandler和您選擇的輸入流捕獲命令輸出。

1

如果你看一下你已經發布的Javadoc鏈接,你會看到Runtime.exec()返回Process對象,而Process類有一個方法getOutputStream()來獲得在新進程的標準輸出流。