2010-02-01 37 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); 
相關問題