2010-02-01 83 views
6

我想在我的Java应用程序的属性文件中有多个键(> 1)。一种简单的方法是在属性文件中将每个键定义在单独的行中,并将相同的值定义到所有这些键。这种方法增加了属性文件的可维护性。另一种方式(我认为这可能是聪明的做法)是用单行中的值定义逗号分隔的键。例如java中的属性 - 我们可以使用逗号分隔的单值键吗?

key1,key2,key3=value 

Java.util.properties不支持此开箱即用。有没有人以前做过类似的事情?我没有谷歌,但没有找到任何东西。

--manish

回答

2

由于java.util.Properties延伸java.util.Hashtable,你可以使用Properties加载数据,然后处理后的数据。

使用java.util.Properties,而不是负荷运行自己的数据的好处是,对于性能的语法实际上是fairly robust,已经支持很多的,你可能最终不得不重新实现(如分裂值在整个有用的功能多行,逃生等)。

4

属性文件的好处之一是它们很简单。没有复杂的语法学习,而且它们很容易在眼睛上。

想知道属性foo的价值是什么?快速扫描左栏,直到看到“foo”。

就我个人而言,如果我看到像这样的属性文件,我会觉得很困惑。

如果这是你真正想要的,应该很容易实现。一个快速的第一刺可能是这样的:

  • 打开文件
  • 对于每一行:
    • trim()空白
    • 如果该行是空的或以#开头,继续前行
    • 分割为“=”(限制设置为2),留下您的密钥和值
    • ,”的分割键
    • 对每个键,trim()并将其添加到地图中,随着trim()倒是值

就是这样。

+0

+1“保持简单”的建议。但你推荐的实现并不那么简单(你可以使用属性并对其进行后处理) – helios 2010-02-01 19:35:25

+0

不要忘记属性文件遵循以下原则: Key = Value或Value = Key或两者(即key = key或value = value) 。 “=”号分开两个区域。 Apache Struts在引入LookupDispatchAction时广泛使用了这个特性。只是想添加我的2cent价值:-) – 2010-02-01 19:43:19

+0

@Gentleman:也许Struts有一些特殊的Properties子类,但是常规的Java'Properties'只是key = value。 – 2010-02-01 19:58:49

5

我不知道现有的解决方案,但它应该是很容易实现:

String key = "key1,key2,key3", val = "value"; 
Map<String, String> map = new HashMap<String, String>(); 
for(String k : key.split(",")) map.put(k, val); 
System.out.println(map);