検索
連載

WindowsとLinuxの両方で動作するコードを書くJavaTips 〜Javaプログラミング編

Share
Tweet
LINE
Hatena

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 システムプロパティの列挙

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


 実行例は省略しますが、os.name やjava.class.path、file.separator などのプロパティとその値が表示されます。

 ここで表示されたシステムプロパティについて、その値を直接指定するコードを書くと、異なるシステムプロパティの値を持つ別の環境ではそのクラスファイルはうまく動きません。これを避けるため、System.getPropertyを用いてシステムプロパティの値を得るようにします。

 OSの名前を得るにはgetProperty(“os.name”)とします。例えばリスト2は実行環境のOSによって実行処理を分岐するコードです。

リスト2 OSによって処理を変える

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


 ファイルシステムが異なる実行環境では、ファイルの区切り文字やディレクトリの指定の仕方が異なります。異なる環境に応じてパス名を正しく指定するには、例えばリスト3のようにします。

リスト3 異なる環境においてファイルのパスを指定する

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


 getPropertyでユーザーのホームディレクトリを指定するには、“user.home”というプロパティを引数にします。こうすることで、実行環境によって異なるファイル名がString型として返されます。

 さらにここではjava.io.Fileクラスのクラスフィールド“separator”も用いています。ファイルパスの区切り文字はシステムに依存します。Windowsでは“\”、LinuxなどUNIX系統のOSでは“/”が用いられています。File.separatorはこれらのシステム依存の値を表してくれます。ここのコードではリスト2のようにOSの名前を調べる手間を省けています。

実行結果(Windows)

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


実行結果(Linux)

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***


Profile

WINGSプロジェクト

小田原大


Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る