JavaのプログラムでMacかWindowsかを見分ける

スポンサーリンク

Javaの利点の一つにOSを選ばずに実行できるという特徴があります。実行ファイルである拡張子がclassのファイルは実行されるときにjavaコマンドの引数として渡されます。Test.classを実行するには以下のようなコマンドになります。

java Test

このときjavaというコマンドはそれぞれのOSに沿った形でこのTest.classファイルを可能な限り同じように実行します。とはいえ同じにはできないものもあります。

MacとWindowsの違い

例えばMacとwindowsの間で一番目立つ違いはファイルのパスです。Macは/から始まるパスになっていますがWindowsはC:\\またはC:¥¥というドライブ名から始まるパスになっています。ファイルの書き出しの時に同じ場所を指定するのはできません。これはファイルの指定方法についてはMacとWindowsで処理を分けなければならないことを意味しています。ここでは実行しているJavaプログラムが自分はMacとWindowsのどちらのOSで動いているかを判別できる方法について書きます。

何を元に判別するか

Javaは実行時にシステムの情報を持っています。以下のコードを実行してください。

java.util.Properties p = System.getProperties();
for(Object key:p.keySet()){
  System.out.println(key + ":" + p.getProperty(key.toString()));
}

このPropertiesというクラスはキーと値の組み合わせを持つクラスです。keySetというメソッドによりキーのセットを全て取得できます。あとはそれを標準出力に出力していきます。たくさんの行が出力されたと思います。

java.runtime.name:Java(TM) SE Runtime Environment
sun.boot.library.path:/Library/Java/JavaVirtualMachines/jdk1.8.0_102.jdk/Contents/Home/jre/lib
java.vm.version:25.102-b14
user.country.format:JP
gopherProxySet:false
(以下略)

OSやJavaの情報を持っています。以下のような出力があるので注目してください。

os.name:Mac OS X

これはMacで実行したものですがWindowsであれば

os.name:Windows 7

のように出力されるはずです。これを使ってOSを見分けるプログラムを書きます。

実装をする

os.nameというキーを取得するにはPropertiesクラス経由ではなく以下のように取得できます。

System.getProperty("os.name")

これを使って実装します。

public class SystemUtil {

  public static boolean isMac() {
    return System.getProperty("os.name").toLowerCase().startsWith("mac");
  }

  public static boolean isWindows() {
    return System.getProperty("os.name").toLowerCase().startsWith("windows");
  }

  public static void main(String[] args) {
    if (isMac()) {
      System.out.println("このOSはMacです。");
    } else if (isWindows()) {
      System.out.println("このOSはWindowsです。");
    } else {
      System.out.println("このOSは予想していませんでした。(" + 
        System.getProperty("os.name") + ")");
    }
  }
}

MacでもWindowsでもないものはelse節にきて情報を出力するようにしています。実行結果はOSによって異なります。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

%d人のブロガーが「いいね」をつけました。