Windows 判定
Grizzly のソース見てたら、Windows 判定をこんな風にやってた。
private static final boolean WIN32 = "\\".equals(System.getProperty("file.separator"));
なるほど。
何も考えずにやるとこんな感じだけど
private static final boolean WIN32 = System.getProperty("os.name") .toLowerCase().startsWith("windows");
OS 名の文字列よりはファイルセパレータの方が変化が少ないという判断ですかね。
まぁ、やるならこちらの方がよいですかね。
private static final boolean WIN32 = File.separatorChar == '\\';
他には
無理やり考えると、改行コードで見たり、
private static final boolean WIN = "\r\n".equals(System.getProperty("line.separator"));
パス(PATHやCLASSPATH)区切は*nix系は ':' なので、
private static final boolean WIN32 = File.pathSeparatorChar == ';';
MXBeanからOS名取ったり、
private static final boolean WIN = ManagementFactory.getOperatingSystemMXBean() .getName().toLowerCase().startsWith("windows");
Windows はロードアベレージをサポートしていないってことで
private static final boolean WIN = ManagementFactory.getOperatingSystemMXBean() .getSystemLoadAverage() < 0;
Win32FileSystem もあるので、ダメかな
private static final boolean WIN = FileSystems.getDefault().getClass().getSimpleName() .equals("WinNTFileSystem");
なんてのも無理くり書くことはできる。
一般的には
以下のようにすることが多いでしょう。
public static final boolean IS_WINDOWS = System.getProperty("os.name").toLowerCase().startsWith("win"); public static final boolean IS_MAC = System.getProperty("os.name").toLowerCase().startsWith("mac"); public static final boolean IS_LINUX = System.getProperty("os.name").toLowerCase().startsWith("linux");