JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java 新手區  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 12.如何取得由Java程式呼叫的外在程式的執行結果? [Re:swanky]
swanky

暴走熊

版主

發文: 461
積分: 9
於 2003-08-21 09:16 user profilesend a private message to usersend email to swankyreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
作者: contagious (傳染) 看板: java
標題: [合作翻譯]Java新手 12
時間: Mon Jun 17 22:46:54 2002

12.如何取得由Java程式呼叫的外在程式的執行結果?

每個application都會有一個Runtime類別的instance,讓你可以和執行時期的環境做互動。
你可以呼叫 getRuntime()來取得這個instance。

Runtime.exec()的參數指的是要執行的程式。Runtime.exec()會產生一個原生的process並
傳回一個 Process的子類別,可以用來控制或者取得這個原生process的資訊。這個process
既不使終端機介面,也不用命令列介面,而是將他的I/O操作都轉向到這三個串流:

Process.getOutputStream(), Process.getInputStream(), Process.getErrorStream().

下面是一個例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.io.*;
public class ReadingProcess {
    public static void main(String args[]){
        //Provide a command as an input argument
        Runtime runtime = Runtime.getRuntime();
        Process process = runtime.exec(args[0]);
        BufferedWriter buffOut = new BufferedWriter(
                                 new OutputStreamWriter(
                                        process.getOutputStream());
        BufferedReader buffIn = new BufferedReader(
                                new InputStreamReader(
                                        process.getInputStream());
 
        buffOut.write("//Some String");
        buff.flush(); //Ensure that the output reaches the process
 
        String s;
 
        if((s=buffIn.readLine())!= null)
        System.out.println(s);
 
        buffOut.close();
        buffIn.close();
    }
}


注意!
根據不同的底層作業平台,你可能會遇到一些停滯的狀況。有一些平台的I/O串流只有很小
的buffer,如果不能快速的對標準I/O串流做讀寫,則可能會發生停滯的狀況。

12. How do you retrieve output from external programs that have been executed by
a program developed on the Java Platform?

Every application written on has one instance of the class Runtime to allow
interaction with its runtime environment. You retrieve this instance by calling
getRuntime().

The arguments of Runtime.exec() are commands to be executed in the runtime
environment. The Runtime.exec() methods create native processes and return a
subclass of Process which provides methods to control and retrieve information
from the underlying process. The process has neither a terminal nor a console
thus all its standard I/O operations are redirected to the parent process via
three streams: Process.getOutputStream(), Process.getInputStream(),
Process.getErrorStream().

Note the following sample:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.io.*;
public class ReadingProcess {
    public static void main(String args[]){
        //Provide a command as an input argument
        Runtime runtime = Runtime.getRuntime();
        Process process = runtime.exec(args[0]);
        BufferedWriter buffOut = new BufferedWriter(
                                 new OutputStreamWriter(
                                        process.getOutputStream());
        BufferedReader buffIn = new BufferedReader(
                                new InputStreamReader(
                                        process.getInputStream());
 
        buffOut.write("//Some String");
        buff.flush(); //Ensure that the output reaches the process
 
        String s;
 
        if((s=buffIn.readLine())!= null)
        System.out.println(s);
 
        buffOut.close();
        buffIn.close();
    }
}


A note of warning - you may experience some hanging depending on the type of
native platform you are running on. Some native platforms have small buffers for
standard I/O streams, failure to quickly write/read from the standard
output/input streams into those of the subprocess may cause the subprocess to
block.


reply to postreply to post
話題樹型展開
人氣 標題 作者 字數 發文時間
66936 [精華] 新手常見問題解答 swanky 26 2003-08-21 09:00
116428 1.java.lang.NoClassDefFoundError swanky 744 2003-08-21 09:02
51156 Re:1.java.lang.NoClassDefFoundError nfrog8108 150 2005-08-25 17:03
87200 11.deprecated是什麼意思? swanky 946 2003-08-21 09:15
62373 Re:11.deprecated是什麼意思? 寒冰 63 2003-12-25 20:01
72630 12.如何取得由Java程式呼叫的外在程式的執行結果? swanky 3459 2003-08-21 09:16
41373 Re:12.如何取得由Java程式呼叫的外在程式的執行結果? psmonkey 1049 2006-03-07 02:43
5112 Re:12.如何取得由Java程式呼叫的外在程式的執行結果? smartdanny 60 2014-08-07 16:02
72860 13.抽象類別和介面有什麼不同? swanky 3680 2003-08-21 09:18
63002 14.如何改變現在的工作目錄? swanky 951 2003-08-21 09:19
63425 15.前置和後置的increment運算子有什麼不同? swanky 1881 2003-08-21 09:20
62782 16.遞移運算子:為什麼 3<<3 和 3<<1 是一樣的? swanky 1117 2003-08-21 09:21
44886 Re:16.遞移運算子:為什麼 3<<3 和 3<<1 是一樣的? 小波 1188 2005-07-21 19:49
85605 17.如何對兩個日期做相減? swanky 1965 2003-08-21 09:22
52301 Re:17.如何對兩個日期做相減? dinos 25 2005-02-15 17:48
62956 18.我可以在哪裡找到Java程式的寫作慣例(coding convetions)? swanky 803 2003-08-21 09:23
65935 19.介面(interface)可以從別的地方繼承任何的行為嗎? swanky 1296 2003-08-21 09:25
65849 20.如何取得記憶體的統計資料(memory statistics)? swanky 1898 2003-08-21 09:26
71154 2. 啟動在 MS Windows 平台上的外部程式 swanky 757 2003-08-21 09:04
8835 Re:2. 啟動在 MS Windows 平台上的外部程式 kevin75116 238 2011-12-06 19:51
22117 Re:9.使用 '==' 運算子和 java.lang.String.equals()的不同 [Re:jason_chan19] viva0322 146 2008-05-05 11:24
77861 3. 下載最新版的 JDK swanky 122 2003-08-21 09:05
66899 4. 設定永久的 classpath swanky 878 2003-08-21 09:06
63472 5. 載入在使用者的 classpath 中所定義的類別 swanky 643 2003-08-21 09:07
65380 6. 拿到 Java 的認證 swanky 337 2003-08-21 09:08
63332 7. Sun 認證網站資源 swanky 339 2003-08-21 09:09
64783 8. 在基本資料型別和 java.lang.String 之間轉換 swanky 448 2003-08-21 09:11
97510 9.使用 '==' 運算子和 java.lang.String.equals()的不同 swanky 3116 2003-08-21 09:12
22219 Re:9.使用 '==' 運算子和 java.lang.String.equals()的不同 viva0322 867 2008-05-05 10:10
22019 Re:9.使用 '==' 運算子和 java.lang.String.equals()的不同 jason_chan19 690 2008-05-05 10:51
73254 10.在Java中是否可以移動/刪除檔案 swanky 1696 2003-08-21 09:14
39269 Re:10.在Java中是否可以移動/刪除檔案 mch 147 2006-06-11 15:01
» JWorld@TW »  Java 新手區

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8