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

4
我的Java应用程序需要在运行时解析文件路径中的环境变量,文件路径将在属性文件中指定,如下所示。 对于Windows系统,它将是%JAVA_HOME%\certs\myselffign.cer 对于Unix系统,它将是$JAVA_HOME\certs\myselffign.cer 我的Java应用程序需要将这些文件路径解析为绝对路径,并将证书加载到信任库中。
是否有任何方法来实现这一点。 目前,我检查操作系统名称,如果操作系统名称是Windows,则进行模式匹配,使用system.getenv,在非Windows系统中寻找$。
我希望有更好的方法来完成这个任务。

2
System.getEnv()就是做这件事的方法。你有什么问题? - skaffman
1个回答

5
您可以在属性文件中使用标准(Java)模板语法${java.home},然后在运行时用System.getProperty("java.home")的值替换它。因此,在您的文件中,而不是使用以下内容:
certificate=%JAVA_HOME%\certs\myselffign.cer (Windows)
certificate=$JAVA_HOME\certs\myselffign.cer (*nix)

只需使用一个标准:

certificate=${java.home}/certs/myselfsign.cer

在代码中做如下操作:

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

请注意,使用标准模板语法还可以使用一些开源的属性替换工具,例如Spring PropertyResolver。希望这有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接