在跨平台開發中,經常需要根據作業系統類型執行不同邏輯(如路徑分隔符、空設備文件等)。Java 提供了 System.getProperty("os.name") 獲取系統名稱,結合字串匹配即可實現判斷。
public class SysDep {
private static final String UNIX_NULL_DEV = "/dev/null";
private static final String WINDOWS_NULL_DEV = "NULL";
private static final String FAKE_NULL_DEV = "jnk";
public static String getDevNull() {
// 先嘗試 Unix 風格空設備
if (new File(UNIX_NULL_DEV).exists()) {
return UNIX_NULL_DEV;
}
String os = System.getProperty("os.name");
if (os == null) {
return FAKE_NULL_DEV;
}
// Windows 系統名稱通常以 "Windows" 開頭
if (os.startsWith("Windows")) {
return WINDOWS_NULL_DEV;
}
return FAKE_NULL_DEV;
}
public static void main(String[] args) {
System.out.println(getDevNull());
}
}
/dev/null 存在性),再回退到系統屬性判斷,更可靠。"Windows 10"、"Linux"、"Mac OS X" 等,使用 startsWith("Windows") 覆蓋所有 Windows 版本。NullPointerException。若需更精細區分(如 Linux 發行版、macOS 版本),可進一步解析 os.version、os.arch 或讀取 /etc/os-release 等系統文件。但在大多數業務場景下,上述「Windows / 非 Windows」二分法已足夠。