如何在java运行时解析环境变量

use*_*246 4 java environment-variables

我的 java 应用程序需要在运行时解析文件路径中的环境变量,文件路径将在属性文件中指定如下,在 windows 的情况下它将是 %JAVA_HOME%\certs\myselffign.cer 在 unix 的情况下它将是 $JAVA_HOME\ certs\myselffign.cer

我的 java 应用程序需要将这些文件路径解析为绝对路径并将证书加载到信任库中。

有没有办法做到这一点。到目前为止,我正在检查 os.name ,如果 os.name 是 windows 则模式匹配 %% 并使用 system.getenv ,以防非 windows 寻找 $.

我希望有更好的方法来做到这一点

Per*_*ion 5

您可以在属性文件中使用 ${java.home} 的标准 (Java) 模板语法,然后在运行时将其替换为System.getProperty("java.home");. 所以在你的文件中而不是:

certificate=%JAVA_HOME%\certs\myselffign.cer (Windows)
certificate=$JAVA_HOME\certs\myselffign.cer (*nix)
Run Code Online (Sandbox Code Playgroud)

只需使用一个标准:

certificate=${java.home}/certs/myselfsign.cer
Run Code Online (Sandbox Code Playgroud)

并在代码中执行以下操作:

String javaHomePath = System.getProperty("java.home")l
Properties props = Properties.load( ...);
String certFilePath = props.get("certificate");
certFilePath = certFilePath.replaceAll("${java.home}", javaHomePath);
Run Code Online (Sandbox Code Playgroud)

请注意,使用标准模板语法还允许您使用一些开源属性替换工具。像 Spring PropertyResolver。希望有帮助。