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

问题描述:

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

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

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

我希望有一个更好的办法做到这一点

+2

'System.getEnv()'*是*你怎么做到的。你有什么问题? – skaffman 2012-02-11 11:48:40

你可以使用标准(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一样。希望有所帮助。