Javaは特定のプラットフォームに依存しないプログラム言語ですが、他のプログラムを実行させるという行為は特定のプラットフォームに依存した行為となるためあまり推奨できるものではありません。それでも特定のプラットフォームに限定するとしても他のプログラムを実行したい場合もあるものです。
このような場合はRuntimeクラスのexecメソッドを用います。(ただしRuntimeクラスの詳細は割愛しますので、APIを参照してください。)
以下、実際のプログラムを示します。この例ではWindows標準の計算機を実行する例を示します。
public class Test{
public static void main(String[] args){
String result;
try{
Runtime rt = Runtime.getRuntime();
Process p = rt.exec("calc.exe");
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
|
execメソッドの引数に実行するプログラムを記述します。pathが通っている場合は実行ファイル名のみで構いませんが、pathが通っていない場合はフルパスで記述する必要があります。プログラムへ引数を渡すことも可能です。
プログラムが見つけられないなど何らかの理由で実行できない場合はIOExceptionが投げられますので、try〜catchで例外を受け取るか、上にthrowする必要があります。
このメソッドは起動したプログラムの終了を待ちません。終了を待つ場合はwaitForメソッドを用います。
public class Test{
public static void main(String[] args){
String result;
try{
Runtime rt = Runtime.getRuntime();
Process p = rt.exec("calc.exe");
p.waitFor();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
|
また、強制終了することもできます。その場合はdestroyメソッドを用います。以下に10秒後に強制終了するプログラムを示します。
public class Test{
public static void main(String[] args){
String result;
try{
Runtime rt = Runtime.getRuntime();
Process p = rt.exec("calc.exe");
Thread.sleep(10*1000);
p.destroy();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
|
プログラムは通常は返値を返します。これを取得する場合はexitValueメソッドが用意されています。
最後に、標準ストリームをプログラム側で制御することもできます。下記にファイル名を取得するdirコマンドの出力結果をプログラム側で取得する例を紹介します。
import java.io.*;
public class Test{
public static void main(String[] args){
String str;
try{
Runtime rt = Runtime.getRuntime();
Process p = rt.exec("cmd /c dir c:\\");
// Processからストリームを取得する
InputStream is = p.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
// 5行目までは破棄する
for( int i = 0 ; i < 4 ; i++ )
br.readLine();
// 5行目(ファイル名の行)から表示する
while((str = br.readLine()) != null){
System.out.println(str);
}
// 例外処理
}catch(Exception ex){
ex.printStackTrace();
}
}
}
|
C:\java>java Test
2006/12/27 10:33 0 AUTOEXEC.BAT
2006/12/27 10:33 0 CONFIG.SYS
2007/05/22 02:37 <DIR> Data
2006/04/16 22:57 <DIR> docs
2007/01/24 18:59 <DIR> Documents and Settings
2006/04/17 22:32 <DIR> Drivers
2006/10/24 23:32 1,120 INSTALL.LOG
2006/12/30 21:55 <DIR> jdk1.1.8
2007/05/03 13:05 <DIR> Program Files
2001/05/24 12:59 162,304 UNWISE.EXE
2007/06/06 18:45 <DIR> WINDOWS
4 個のファイル 163,424 バイト
7 個のディレクトリ 162,750,808,064 バイトの空き領域
C:\java>
|