0

-- 场景 1 --

这是我的属性文件:

template.lo=rule A | template B
template.lo=rule B | template X
template.lo=rule C | template M
template.lo=rule D | template G

我不认为上面的设计是允许的,因为有重复的键

-- 情景 2 --

template.lo1=rule A | template B
template.lo2=rule B | template X
template.lo3=rule C | template M
template.lo4=rule D | template G

上面的设计绝对是允许的。

我想从 Java 中检索值,所以我将传入密钥以获取值。通常,我会使用这种方式:

PropertyManager.getValue("template.lo1",null);

问题是key会不断增加,上面的例子有4个……未来可能有5个或10个。

所以,我的问题是,我将如何检索所有值?

如果我知道总共有 10 个键,我可以这样使用:

List <String> valueList = new ArrayList<String>();
     for(int i = 1; i<totalNumberOfKeys+1; i++{
     String value = (String) PropertyManager.getValue("template.lo"+i,null)
     valueList.add(value);
}

但问题是我对钥匙的数量一无所知。我无法提取所有值,因为会有其他我不想要的键。

对此有任何想法吗?

4

3 回答 3

3

jav.util.PropertiespropertyNames()

如果尚未从主属性列表中找到同名的键,则返回此属性列表中所有键的枚举,包括默认属性列表中的不同键。

您可以遍历它们并仅获取您需要的那些。

还有stringPropertyNames().

于 2013-10-31T13:09:30.907 回答
0

我会尝试获取这些属性,直到我得到null

public List<String> getPropertyValues(String prefix) {
    List<String> values = new ArrayList<>();
    for(int i=1;;i++) {
        String value = (String) PropertyManager.getValue(prefix + i, null);
        if(value == null){
            break;
        }
        values.add(value);          
    }
    return values;
}

这假设属性列表中没有漏洞(例如template.lo1=.., template.lo3=...:)

于 2013-10-31T13:12:07.327 回答
0

ResourceBundle是我以前用于属性文件的。

如果您查看 API,您应该能够找到如何为您的文件创建 ResourceBundle。然后有一种containsKey(String)方法可以用作循环条件。

因此,您将使用以下内容:

ResourceBundle bundle = new ResourceBundle();
bundle.getBundle("My/File/Name");

List <String> valueList = new ArrayList<String>();

int i = 1;
String propertyKey = "template.lo" + i;
while( bundle.containsKey(propertyKey) ) {
    valueList.add((String) bundle.getObject(propertyKey));
    i++;
    propertyKey = "template.lo" + i;
}
于 2013-10-31T13:12:33.980 回答