java.util.Properties 似乎假定每个属性键都有一个值。 也就是说,
foo=1
foo=2
不是预期的,
有没有这种多值属性表的类,也提供了load方法?
尝试:
foo=1,2
String[] foos = properties.getProperty("foo", "").split(",");
java.util.Properties 功能非常有限。如果您想要支持列表,您可能需要尝试 Apache Commons Configuration 中的 PropertyConfiguration,
有了它,您可以为列表设置任何分隔符,它会自动为您分割。您还可以在属性文件中执行其他奇特的操作。例如,
foo=item1, item2
bar=${foo}, item3
number=123
你可以这样检索它,
Configuration config = new PropertiesConfiguration("your.properties");
String[] items = config.getStringArray("bar"); // return {"item1", "item2", "item3"}
int number = config.getInt("number", 456); // 456 is default value
尼克的正确答案。
或者,如果您可以为每个值指定不同的子名称,则您的属性可以是:
my.properties
foo.title=Foo
foo.description=This a big fat foo.
如果您有更复杂的示例,您可以使用以下内容:
# pairs of properties
source1=foo
target1=bar
source2=anotherFoo
target2=regardingBar
source3= ...
在您的代码中,您必须搜索:
Map<String, String> myMap = new HashMap<>();
for (int i=1; i<max; i++) {
String source = properties.get("source" + i);
String target = properties.get("target" + i);
if (source == null || target == null) {
break;
}
myMap.put(source, target);
}
缺点:更新属性文件。如果删除值 *2,则不会添加以下所有值。为了改进,您可能需要用继续替换中断,并坚持最大允许对数。
这不会提供加载方法,而是提供存储它们的位置,您可以使用 apache commons multivaluemap:
“MultiValueMap 装饰另一个映射,允许它的键具有多个值。”
这往往是http请求参数的要求...
http://commons.apache.org/collections/apidocs/org/apache/commons/collections/map/MultiValueMap.html