※ 引述《newpuli (sheepu)》之銘言:
: 請問...JAVA裡面 有沒有什麼辦法可以把dos視窗裡顯示的訊息
: 存到一個字串變數裡呢?
: ex.
: SString result = "";
^^^^^^^^^^^^^^^^^^^^^^^
我猜你這邊應該是多打一個 S 吧 (因為API裡面查不到 == ==|||)
: String cmd = "cmd.exe /c start ping xx.xx.xx.xx";
: Process ps = Runtime.getRuntime().exec(cmd);
: 之後他會開一個新dos視窗去顯示PING的結果
: 顯示結果當然會出現 "Reply from xx.xx.x.xx: bytes = 32...." 等等
: 要怎麼把這些顯示結果 存到一個result這個變數裡呢?
恩...因為之前剛好有研究一下 exec() 的用法
在 JavaWorld 裡面有一篇文章提到你要的功能 連結如下 :
http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=3
依照上面範例 MediocreExecJavac.java 所說的...
利用抓出 Process 內的函式 getInputStream() 將其內部的資料儲存即可
不過我在測試你下的指令的時後 程式會額外多開一個視窗
執行完後 InputStream 好像也沒抓到東西 (這邊我不是很確定 你可以在試試看)
於是我把下的指令改成 String cmd = "ping xx.xx.xx.xx" ;
後來就可以抓到了.... 以下是我改出來的部分程式碼
String result = "";
String cmd = "ping www.yahoo.com.tw";
try
{
Process ps = Runtime.getRuntime().exec(cmd);
InputStreamReader isr = new InputStreamReader(ps.getInputStream());
BufferedReader br = new BufferedReader(isr);
String line = null ;
while ( (line = br.readLine()) != null)
result = result + line ;
ps.waitFor() ;
System.out.println("收到 : " + result) ;
}
catch(Exception e) {}
抓出來的結果如下所示 :
收到 : Pinging rc.tpe.yahoo.com [202.43.195.13] with 32 bytes of data:Reply
from
202.43.195.13: bytes=32 time=5ms TTL=239Reply from 202.43.195.13: bytes=32
time
=6ms TTL=239Reply from 202.43.195.13: bytes=32 time=5ms TTL=239Reply from
202.43
195.13: bytes=32 time=6ms TTL=239Ping statistics for 202.43.195.13:
Packets:
Sent = 4, Received = 4, Lost = 0 (0% loss),Approximate round trip times in
mill
i-seconds: Minimum = 5ms, Maximum = 6ms, Average = 5ms
資訊有點亂...這部分可能要麻煩你做一下切割了~~~
大致上是這樣吧.....
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.25.118.131