
System.getenv() 是 Java 提供的获取操作系统环境变量的标准方式,它返回一个不可修改的 Map<String, String>,键为环境变量名(如 "PATH"、"TEMP"),值为对应字符串。
直接获取单个环境变量
最常用的方式是传入变量名,返回其值(若不存在则返回 null):
String path = System.getenv("PATH");String temp = System.getenv("TEMP"); // WindowsString tmp = System.getenv("TMPDIR"); // macOS/Linux
注意大小写敏感:Windows 下通常用 "TEMP" 或 "TMP",Linux/macOS 一般用 "TMPDIR";"PATH" 在所有平台均为大写。
获取全部环境变量并遍历
适用于调试或动态查找所需变量:
调用 System.getenv() 不带参数,得到完整映射 遍历时建议判空,避免 NPE 可结合 containsKey() 判断变量是否存在Map<String, String> env = System.getenv();if (env.containsKey("JAVA_HOME")) { System.out.println("Java home: " + env.get("JAVA_HOME"));}
常见注意事项
环境变量在 JVM 启动时读取,运行中修改系统变量不会自动生效,需重启 JVM 某些 IDE(如 IntelliJ)或构建工具(如 Maven)可能覆盖或隔离环境变量,建议在终端直接运行验证 权限限制:Java 无法获取被操作系统策略隐藏的敏感变量(如某些容器或沙箱环境) 跨平台兼容性:避免硬编码 "TEMP",可用 System.getProperty("java.io.tmpdir") 获取更可靠的临时目录
替代方案:System.getProperty() 与环境变量的区别
System.getProperty() 获取的是 JVM 系统属性(如 "user.home"、"os.name"),不是环境变量。虽然部分属性(如 "java.io.tmpdir")和环境变量(如 "TMPDIR")语义相近,但来源不同、行为独立。需要区分使用场景:
要读取用户或系统级配置(如数据库 URL、密钥前缀)→ 用 System.getenv() 要获取 JVM 运行时信息(如当前用户、JDK 版本)→ 用 System.getProperty()

评论(0)