我的 java 应用程序需要在运行时解析文件路径中的环境变量,文件路径将在属性文件中指定如下 如果是 Windows,它将是 %JAVA_HOME%\certs\myselffign.cer 如果是 unix,它将是 $JAVA_HOME\certs\myselffign.cer
我的 java 应用程序需要将这些文件路径解析为绝对路径并将证书加载到信任库中。
有什么办法吗? 截至目前,我正在检查 os.name ,如果 os.name 是 windows 则模式匹配 %% 并使用 system.getenv ,以防非 windows 寻找 $。
我希望有更好的方法来做到这一点
最佳答案
您可以在属性文件中使用 ${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。希望对您有所帮助。
关于java - 如何在 java 运行时解析环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9239932/