1. 简介
在开发中,有时需要根据不同操作系统执行特定逻辑。Java 提供了多种方式来检测当前运行环境:
✅ 纯 Java 方案:使用 System.getProperty()
✅ 第三方库方案:使用 Apache Commons Lang 的 SystemUtils
❌ 避免直接解析环境变量(跨平台兼容性差)
本文将介绍两种主流实现方式,并对比它们的实际效果。
2. 实现方案
2.1. 使用系统属性
通过 System.getProperty("os.name")
直接获取操作系统名称是最简单粗暴的方式:
public String getOperatingSystem() {
String os = System.getProperty("os.name");
// System.out.println("Using System Property: " + os);
return os;
}
⚠️ 注意事项:
- 返回值格式可能因 JVM 实现而异(如 "Windows 10" 或 "Mac OS X")
- 无需额外依赖,但需要自行处理不同 OS 的命名差异
2.2. 使用 Apache Commons Lang
SystemUtils
封装了跨平台细节,是更优雅的解决方案:
public String getOperatingSystemSystemUtils() {
String os = SystemUtils.OS_NAME;
// System.out.println("Using SystemUtils: " + os);
return os;
}
✅ 优势:
- 统一返回标准化名称(如 "Windows 10" 而非 "win10")
- 内置 OS 类型判断方法(如
SystemUtils.IS_OS_WINDOWS
) - 处理了不同 JVM 实现的命名差异
3. 运行结果
在 Windows 10 环境下执行两种方案,输出完全一致:
Using SystemUtils: Windows 10
Using System Property: Windows 10
⚠️ 实际踩坑:
- Linux 环境可能返回 "Linux" 或具体发行版名称(如 "Ubuntu")
- macOS 可能返回 "Mac OS X" 或 "macOS"
4. 总结
两种方案都能满足基本需求,选择建议:
场景 | 推荐方案 |
---|---|
简单工具类 | System.getProperty() |
企业级应用 | SystemUtils |
需要复杂 OS 判断 | SystemUtils + 自定义逻辑 |
完整示例代码已上传至 GitHub,包含各平台测试用例。