5

有没有办法我们可以在.properties文件中使用条件语句?

像:

if(condition1)
    xyz = abc
else if(condition2)
    xyz = efg
4

5 回答 5

7

没有属性文件中没有这样的条件语句,可能你会写一个包装器Properties来封装你的逻辑

例子:

class MyProperties extends Properties {


    /**
     * 
     * 
     * 
     * @param key
     * @param conditionalMap
     * @return
     */
    public String getProperty(String key, List<Decision> decisionList) {
        if (decisionList == null) {
            return getProperty(key);
        }
        Long value = Long.parseLong(getProperty(key));
        for (Decision decision : decisionList) {
            if (Condition.EQUALS == decision.getCondition() && decision.getValue().equals(value)) {
                return getProperty(decision.getTargetKey());
            }
        }
        return super.getProperty(key);
    }
}

enum Condition {
    EQUALS, GREATER, LESSER

}

class Decision {
    Condition condition;
    String targetKey;
    Long value;
    //accessor

    public Condition getCondition() {
        return condition;
    }

    public void setCondition(Condition condition) {
        this.condition = condition;
    }

    public String getTargetKey() {
        return targetKey;
    }

    public void setTargetKey(String targetKey) {
        this.targetKey = targetKey;
    }

}

所以现在例如如果你想读取属性文件,获取年龄类别,如果它大于 0 并且小于 10 读取kid

所以你可以通过这些条件的列表,

注意:这个设计可以有很大的改进(不是好的设计),它只是为了说明如何包装属性和添加 OP 想要的东西

于 2012-06-05T15:11:34.420 回答
7

不,这是不可能的。文件格式免费提供:http ://docs.oracle.com/javase/6/docs/api/java/util/Properties.html#load%28java.io.Reader%29 。

在 Java 代码中执行此操作:

if (condition1) {
    return properties.getProperty("xyz.1");
}
else if (condition2) {
    return properties.getProperty("xyz.2");
}
于 2012-06-05T15:13:42.823 回答
3

如果您的问题是针对不同环境(例如 devl、test、perf、prod)的不同属性,常见的解决方案是针对每个环境使用不同版本的属性文件。将环境信息传达给您的应用程序并查找附加到文件名的正确名称的文件。

春天是这样的:

基于 Spring 的 Web 应用程序的环境特定配置?

于 2012-06-05T15:17:12.547 回答
3

正如@Jigar 所说,属性文件中没有条件逻辑。但是你可以在那里有两行,例如:

xyz.condition1 = abs
xyz.condition2 = efg

并且,在您访问该属性的代码中,将适当的条件附加到密钥。

于 2012-06-05T15:17:15.173 回答
0

这是这样的:

xyz[condition1]=abs
xyz[condition2]=efg
于 2018-05-16T09:55:57.357 回答