■JavaはOS非依存?
JavaのクラスファイルはOSに依存せず、Java仮想マシン上で動くことになっています。しかしJavaプログラムでOSに依存するプロパティを直接指定することもできるため、例えばLinux上でないと正しく動作しないJavaプログラムもあります。
WindowsとLinuxを並行して開発するといった状況では、この辺りの事情を考慮する必要があります。本TIPSでは、JavaでOSのシステムプロパティを用いるためのjava.lang.SystemクラスのgetPropertyメソッドを紹介します。
| System.getProperty |
|
引数:
|
String(システムプロパティ) |
|
戻り値:
|
String (システムプロパティの値) |
getPropertyメソッドによって、システムプロパティの値を知ることができます。システムプロパティとはクラスパスやOSの名前、javaのバージョンなどの環境の情報です。システムプロパティとその値が具体的にどういうものであるかを列挙して確認するには、例えばリスト1のようにします。
| リスト1 システムプロパティの列挙 |
//import java.util.*; が必要
Properties p = System.getProperties();
for(Iterator i = p.keySet().iterator();i.hasNext();){
String value = (String)i.next();
System.out.println(value+"="+System.getProperty(value));
}
// p.list(System.out);だけでも同等の表示を行う |
実行例は省略しますが、os.name やjava.class.path、file.separator などのプロパティとその値が表示されます。
ここで表示されたシステムプロパティについて、その値を直接指定するコードを書くと、異なるシステムプロパティの値を持つ別の環境ではそのクラスファイルはうまく動きません。これを避けるため、System.getPropertyを用いてシステムプロパティの値を得るようにします。
OSの名前を得るにはgetProperty(“os.name”)とします。例えばリスト2は実行環境のOSによって実行処理を分岐するコードです。
| リスト2 OSによって処理を変える |
String osname = System.getProperty(“os.name”);
if(osname.indexOf(“Windows”)>=0){
// Windowsであったときの処理
} else if(osname.indexOf(“Linux”)>=0){
// Linuxであったときの処理
} else if(osname.indexOf(“Mac”)>=0){
// MacOSであったときの処理
} else {
// その他の環境だったときの処理
} |
ファイルシステムが異なる実行環境では、ファイルの区切り文字やディレクトリの指定の仕方が異なります。異なる環境に応じてパス名を正しく指定するには、例えばリスト3のようにします。
| リスト3 異なる環境においてファイルのパスを指定する |
System.getProperty(“user.home”)+File.separator+"hoge.txt" |
getPropertyでユーザーのホームディレクトリを指定するには、“user.home”というプロパティを引数にします。こうすることで、実行環境によって異なるファイル名がString型として返されます。
さらにここではjava.io.Fileクラスのクラスフィールド“separator”も用いています。ファイルパスの区切り文字はシステムに依存します。Windowsでは“\”、LinuxなどUNIX系統のOSでは“/”が用いられています。File.separatorはこれらのシステム依存の値を表してくれます。ここのコードではリスト2のようにOSの名前を調べる手間を省けています。
| 実行結果(Windows) |
C:\Documents and Settings\haradai\hoge.txt |
| 実行結果(Linux) |
/home/users/haradai/hoge.txt |
TechTargetジャパン
キャリアアップ

**先週の人気講座ランキング**
〜 Android編 〜