System.getProperty()获取JVM系统属性(如os.name),不能读取操作系统环境变量;环境变量(如PATH、JAVA_HOME)必须用System.getenv()获取,二者来源、用途不同,不可混用。

System.getProperty 不能直接获取操作系统的环境变量,它读取的是 Java 虚拟机(JVM)的系统属性(system properties),比如 os.name、java.home 等。环境变量(如 PWD、PATH、HOME)需通过 System.getenv() 获取。
区分 system properties 和 environment variables
Java 中这两类信息来源不同、用途不同:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
System.getProperty():返回 JVM 启动时读取的内部属性,例如:
System.getProperty("os.name")→ "Windows 10" 或 "Linux"System.getProperty("user.dir")→ 当前工作目录(注意:这不是环境变量PWD,但值常相同) -
System.getenv():返回操作系统层面的环境变量,例如:
System.getenv("PATH")→ 系统 PATH 字符串System.getenv("HOME")(Linux/macOS)或System.getenv("USERPROFILE")(Windows)
正确获取常见环境变量的方法
使用 System.getenv(String key) 安全读取指定环境变量:
- 推荐写法(避免空指针):
String path = System.getenv("PATH");<br> if (path != null) { /* 使用 path */ } - 获取所有环境变量(Map):
Map<String, String> env = System.getenv();<br> env.forEach((k, v) -> System.out.println(k + "=" + v)); - 跨平台兼容提示:
"HOME"在 Windows 上通常为空,应改用"USERPROFILE";"PWD"在 macOS/Linux 有效,但 Windows 无此变量;
建议优先用System.getProperty("user.home")替代HOME/USERPROFILE,更可靠。
为什么不能用 System.getProperty 读取 PATH 或 JAVA_HOME?
因为这些不是 JVM 内置属性(除非你手动用 -D 参数传入):
-
java -Dmy.path=$PATH MyApp后,才能用System.getProperty("my.path") -
JAVA_HOME是环境变量,必须用System.getenv("JAVA_HOME") - 某些属性如
java.class.path虽与环境相关,但它是 JVM 解析后的路径,不等同于CLASSPATH环境变量
小结:按需选择 API
需要操作系统原始环境变量 → 用 System.getenv()
需要 JVM 运行时信息(如 OS 类型、用户目录、Java 版本)→ 用 System.getProperty()

















