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,包含各平台测试用例。


原始标题:How to Detect the OS Using Java