我想为我的生产.properties文件定义工作目录的属性(比如work.dir=/home/username/working-directory
),而不对/home/username
进行硬编码。
我想在硬编码的user.home
上引用系统属性/home/username
,以使work.dir
更通用。
如何引用系统属性并将其连接到用户定义的.properties中的其他用户定义的字符串?
注意:我不想访问我的java代码中的user.home属性,而是访问我定义的.properties。我希望能够为我的生产和开发(例如JUnit测试)替换具有不同值的work.dir
的值。
答案 0 :(得分:4)
从文件中获取属性,然后替换支持的宏。
String propertyValue = System.getProperty("work.dir");
String userHome = System.getProperty("user.home" );
String evaluatedPropertyValue = propertyValue.replace("$user.home", userHome );
答案 1 :(得分:3)
您可以使用Commons Configuration管理您的媒体资源并使用Variable Interpolation
如果您熟悉Ant或Maven,您肯定已经遇到了在加载配置文件时自动扩展的变量(如
${token}
)。 Commons Configuration也支持此功能[...]
这将允许带有
的.properties文件work.dir=${user.home}/working-directory
答案 2 :(得分:0)
此功能在java.util.Properties中不可用。但是许多库将变量替换添加到属性中。
以下是使用OWNER API库尝试执行操作的示例(请参阅“导入属性”一节):
public interface SystemPropertiesExample extends Config {
@DefaultValue("Welcome: ${user.name}")
String welcomeString();
@DefaultValue("${TMPDIR}/tempFile.tmp")
File tempFile();
}
SystemPropertiesExample conf =
ConfigFactory.create(SystemPropertiesExample.class, System.getProperties(), System.getenv());
String welcome = conf.welcomeString();
File temp = conf.tempFile();