这是我之前的问题(在此处找到)的后续行动。到目前为止,我的属性文件由简单的键值对组成,例如整数和字符串。我现在想用它在其中放置一些更高级的结构,更具体地说,我需要一个 Map<A, Integer> 其中 A 是我定义的类,例如:
foo=bar,5;baz,10
这可能吗?如果是这样,我应该如何分别格式化文件和解析地图?
有没有更好的方法来解决这个问题?
这是我之前的问题(在此处找到)的后续行动。到目前为止,我的属性文件由简单的键值对组成,例如整数和字符串。我现在想用它在其中放置一些更高级的结构,更具体地说,我需要一个 Map<A, Integer> 其中 A 是我定义的类,例如:
foo=bar,5;baz,10
这可能吗?如果是这样,我应该如何分别格式化文件和解析地图?
有没有更好的方法来解决这个问题?
您是否考虑过使用 split() 和 trim()。
请看下面:
ResourceBundle rb = ResourceBundle.getBundle(Prop.class.getName());
String fooValue = rb.getString("foo");
String[] firstSplit = fooValue.split(";");
for(String first : firstSplit){
String firstTrim = first.trim();
String[] intAndString = firstTrim.split(",");
if(intAndString.length == 2){
String intString = intAndString[0].trim();
String stringVal = intAndString[1].trim();
//TODO add entries here or return value.
}
}
对于您正在尝试做的事情和您的长期计划来说,这可能是矫枉过正,但我发现这种事情很容易由 Spring Framework 处理。
这是一个参考,展示了如何处理包括 maps 在内的集合。
这是地图在 Spring 配置文件中的样子
<beans>
<bean id="foo" class="x.y.Foo">
<property name="accounts">
<map>
<entry key="one" value="9.99"/>
<entry key="two" value="2.75"/>
<entry key="six" value="3.99"/>
</map>
</property>
</bean>
</beans>
用你自己的语言使用 XML 而不是属性文件来表示更复杂的结构,它会更少的工作,更少的错误,更容易维护。
您可以使用 JIBX 和 XML Beans 等绑定技术使事情变得更简单。
在这个例子中最简单的做法是为它创建一个单独的属性文件。然后它只有名称/值对,例如
酒吧=5 巴兹=10
如果这是一张大桌子,我不想把它和更一般的东西混在一起。如果是一张有 3 对的桌子,那就不同了。
属性文件确实是复杂数据结构的最佳解决方案。它们适用于名称/值对。如果你超越了这一点,当然,你可以通过发明一种语法来让它工作,但为什么要麻烦呢?如果它是一种超级复杂的语法,那么 XML 是一种可能。或者它可能属于关系数据库。或 CSV 文件。选择符合要求的工具,不要先决定工具,然后尝试使其适合。