system.getproperty() 读取 jvm 启动时加载的系统属性,用于获取跨平台运行所需信息,如 os.name、java.version、user.home、line.separator 等,支持通过 -dkey=value 注入自定义配置。

System.getProperty() 读取的是 JVM 启动时加载的系统属性(system properties),不是操作系统环境变量。它适合获取跨平台运行所需的底层信息,比如操作系统类型、Java 版本、路径分隔符、用户目录等,也支持通过 -Dkey=value 方式传入自定义配置。
基础运行环境信息
这些属性由 JVM 自动注入,无需额外配置,直接调用即可:
-
os.name:返回操作系统名称,如"Linux"、"Windows 10"、"Mac OS X",可用于分支判断本地库加载或路径逻辑; -
os.arch:CPU 架构,如"amd64"、"aarch64",配合os.name可精准匹配 native 依赖; -
os.version:操作系统版本号,例如"5.15.0-107-generic"(Linux 内核)或"10.0"(Windows); -
java.version和java.vendor:分别表示 JDK 版本(如"21.0.3")和厂商(如"Eclipse Adoptium"或"Oracle Corporation"),有助于规避特定实现的兼容性问题。
路径与目录相关属性
用于构建可移植的文件路径和缓存位置,避免硬编码:
-
user.home:当前用户的主目录,Linux/macOS 下类似"/home/xxx",Windows 下为"C:Usersxxx"; -
user.dir:JVM 启动时的工作目录(即执行java命令的路径); -
java.io.tmpdir:JVM 默认临时目录,不同系统默认值不同,但保证可写; -
java.home:JDK 安装根目录,如"/opt/java/jdk-21",常用于定位 tools.jar 或 jre/bin 下工具; -
file.separator和path.separator:分别对应"/"或"\"、":"或";",比字符串拼接更安全。
运行时行为与格式控制
影响文本处理、类加载、I/O 等基础行为:
-
line.separator:当前系统的换行符,Linux/macOS 是" ",Windows 是" ",写日志或生成文本文件时应使用它; -
file.encoding:默认字符集,常通过-Dfile.encoding=UTF-8显式设置,避免乱码; -
java.class.path:JVM 加载类时使用的 classpath,可用于调试资源查找路径; -
java.library.path:JVM 查找 native 库(.so/.dll/.dylib)的路径列表,排查UnsatisfiedLinkError时有用。
自定义配置参数
通过 JVM 启动参数 -Dkey=value 注入,程序中按需读取:
- 启动命令示例:
java -Dapp.config=/etc/myapp.conf -Ddebug.mode=true MyApp; - 代码中获取:
String configPath = System.getProperty("app.config");; - 含空格的值需加引号:
-Dlog.dir="/var/log/my app"; - 注意:该方式只接受标准
-D参数,-X或-XX类非标准选项无法通过getProperty()获取。











