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

时间:2012-02-11 11:45:49

标签: java environment-variables

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

我的java应用需要将这些文件路径解析为绝对路径,并将证书加载到truststore。

有没有办法解决这个问题。 截至目前,我正在检查os.name,如果os.name是windows,那么模式匹配为%%并使用system.getenv,以防非windows寻找$。

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

1 个答案:

答案 0 :(得分:4)

您可以在属性文件中使用$ {java.home}的标准(Java)模板语法,然后在运行时将其替换为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一样。希望有所帮助。