JavaのクラスファイルはOSに依存せず、Java仮想マシン上で動くことになっています。しかしJavaプログラムでOSに依存するプロパティを直接指定することもできるため、例えばLinux上でないと正しく動作しないJavaプログラムもあります。
WindowsとLinuxを並行して開発するといった状況では、この辺りの事情を考慮する必要があります。本TIPSでは、JavaでOSのシステムプロパティを用いるためのjava.lang.SystemクラスのgetPropertyメソッドを紹介します。
System.getProperty
引数:String(システムプロパティ)
戻り値:String (システムプロパティの値)
getPropertyメソッドによって、システムプロパティの値を知ることができます。システムプロパティとはクラスパスやOSの名前、javaのバージョンなどの環境の情報です。システムプロパティとその値が具体的にどういうものであるかを列挙して確認するには、例えばリスト1のようにします。
//import java.util.*; が必要 |
実行例は省略しますが、os.name やjava.class.path、file.separator などのプロパティとその値が表示されます。
ここで表示されたシステムプロパティについて、その値を直接指定するコードを書くと、異なるシステムプロパティの値を持つ別の環境ではそのクラスファイルはうまく動きません。これを避けるため、System.getPropertyを用いてシステムプロパティの値を得るようにします。
OSの名前を得るにはgetProperty(“os.name”)とします。例えばリスト2は実行環境のOSによって実行処理を分岐するコードです。
String osname = System.getProperty(“os.name”); |
ファイルシステムが異なる実行環境では、ファイルの区切り文字やディレクトリの指定の仕方が異なります。異なる環境に応じてパス名を正しく指定するには、例えばリスト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の名前を調べる手間を省けています。
C:\Documents and Settings\haradai\hoge.txt |
/home/users/haradai/hoge.txt |
Copyright © ITmedia, Inc. All Rights Reserved.