簡體   English   中英

使用java.util.properties存儲ArrayList和HashMap

[英]Storing ArrayList and HashMap using java.util.properties

如何使用java.util.properties存儲ArrayList和/或HashMap變量? 如果不可能我可以使用其他類來存儲應用程序配置?

如果您只需要將集合序列化為Strings,我強烈推薦XStream 它使用反射將類序列化為XML。 如果默認行為不適用於您要序列化的類,則有文檔,但到目前為止,以下內容對我有用:

XStream xstream = new XStream();
String xml = xstream.toXML(myObject);
MyClass deserializedObject = (MyClass)xstream.fromXML(xml);
assert deserializedObject.equals(myObject);

所以...如果“ 不這樣做 ”不適合你,那么你需要以某種方式對數據進行編碼。 一種常見的技術是在每個元素的名稱前面添加一些字符串。 例如,如果我有一個包含a-> 1,b-> 2,c-> 3的地圖MyMap,我可能會存儲在屬性文件中:

MyMap.a=1
MyMap.b=2
MyMap.c=3

對於列表,您可以執行相同的操作,只需將索引映射到值。 所以,如果MyList包含{a,b,c}

MyList.0=a
MyList.1=b
MyList.2=c

這是一個黑客,其他人說的都是真的。 但有時你必須做你必須做的事情。

Properties基本上是Map<String, String>意味着鍵和值必須是String對象。 如果你想要更高級的配置,你可以選擇Spring。 它是一個優秀的框架,我在每個項目中都使用它。 Spring配置文件非常靈活。

java.util.Properties僅用於與String鍵和值一起使用。 它確實從Hashtable繼承了put()和putAll()方法,但使用它們來“欺騙”並不是一個好主意。 您是否考慮過只將配置信息存儲在HashMap而不是Properties對象中? 您必須稍微自定義序列化,但在任何情況下您都必須這樣做,因為您無法利用Properties類的默認加載功能。

存儲HashMap是容易的,因為在每一個地圖鍵和值可以通過在相應的鍵和值來表示Properties對象(見setProperty在方法Properties

對於ArrayList您可以執行類似的操作,鍵是索引,值是相應索引中的項。

在這兩種情況下,請記住屬性文件只存儲字符串,因此您必須設計一種方法來將對象中的鍵和值表示為字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM