如何在用户定义的.properties文件中引用系统属性?

时间:2010-09-17 16:20:32

标签: java properties reference

我想为我的生产.properties文件定义工作目录的属性(比如work.dir=/home/username/working-directory),而不对/home/username进行硬编码。

我想在硬编码的user.home上引用系统属性/home/username,以使work.dir更通用。

如何引用系统属性并将其连接到用户定义的.properties中的其他用户定义的字符串?

注意:我不想访问我的java代码中的user.home属性,而是访问我定义的.properties。我希望能够为我的生产和开发(例如JUnit测试)替换具有不同值的work.dir的值。

3 个答案:

答案 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();