2013-07-26 9 views
8

मुझे पता है कि मैं नीचे एक मानचित्र बना सकता हूं।गुण फ़ाइल में मानचित्र संग्रहीत

private static final ImmutableMap<String,String> WordMap = 
ImmutableMap.<String, String>builder() 
.put("blah", "blahblah").put("blabla", "blahblahblah").build() 

मैं अपने मानचित्र के मान को कॉन्फ़िगर फ़ाइल में संग्रहीत करना चाहता हूं। मैं पहले से ही values=value1,value2,value3 करके कॉन्फ़िग फ़ाइल में एक अलग HashSet के लिए मूल्यों के संचय कर रहा हूँ और उसके बाद
new HashSet<String>(Arrays.asList(prop.getProperty(values).split(",")))

मैं अपने नक्शे के लिए कुछ इसी तरह करना चाहते हैं। कोई सुझाव? मैं java.util.Properties

+0

मुझे लगता है कि आप प्रत्येक प्रॉपर्टी/वैल्यू जोड़ी को अपने गुण से 'Properties' (' Properties.putAll (WordMap) 'के माध्यम से डालकर जोड़ना नहीं चाहते हैं) - इसके बजाय आप पूरे मानचित्र को एक के रूप में डालने का प्रयास करें गुणों में एकल मूल्य? – zapl

उत्तर

17

आप इंगित किया है जब से तुम JSON का उपयोग नहीं करना चाहते हैं, तो आप एक के रूप में नक्शे संग्रहीत कर सकती है:

JSONObject json = new JSONObject(); 
json.putAll(WordMap); 
String serializedMap = json.toString(); 
prop.setProperty("wordMap", serializedMap); 

नक्शा पार्स करने के लिए इस तरह केवल एक प्रॉपर्टी:

map=key1=value1,key2=value2,key3=value3 

उपयोग Guava's Splitter and Joiner पढ़ने को सरल बनाने और नक्शा लिखने के लिए:

String formatMap(Map<String, String> map) { 
    return Joiner.on(",").withKeyValueSeparator("=").join(map); 
} 

Map<String, String> parseMap(String formattedMap) { 
    return Splitter.on(",").withKeyValueSeparator("=").split(formattedMap); 
} 

यह तब तक काम करेगा जब कुंजी और मानों में "," या "=" वर्ण नहीं होते हैं।

+0

धन्यवाद! तो मैं सिर्फ संपत्ति प्राप्त कर सकता हूं, parseMap को कॉल कर सकता हूं और इसे अपने मानचित्र के बराबर सेट कर सकता हूं – Lemonio

+0

क्या रिवर्स ऑर्डर के साथ दूसरा कथन करने का एक प्रभावी तरीका होगा? अगर मुझे एक वैल्यू -> कुंजी मैप भी चाहिए और पूरी चीज से गुजरना नहीं है और एक नया फाइल दोबारा बनाना है या गुण फ़ाइल में दूसरी कॉन्फ़िगरेशन स्टोर करना है – Lemonio

+0

@ लेमोनीओ गुवा के बायमैप को देखें: http: // docs। अमरूद-libraries.googlecode।com/Git/जावाडोक/com/गूगल/आम/इकट्ठा/BiMap.html – dnault

1

java.util.Properties उपयोग कर रहा हूँ आंतरिक गुण में उल्लेख किया है महत्वपूर्ण मूल्य जोड़े फाइल के भंडारण के लिए hashtable उपयोग करता है। आप अपने उद्देश्य के लिए इसका पूरा उपयोग कर सकते हैं।

+0

@SotiriosDelimanolis हाँ सही किया गया। धन्यवाद! –

+0

आप यह भी बदलना चाहते हैं कि यह आंतरिक रूप से _use नहीं है। मैं समझता हूं कि इसमें एक आवृत्ति चर है। यह वास्तव में 'हैशटेबल' बढ़ाता है। यह दूसरों को भ्रमित कर सकता है। –

+0

@ ज़िम-ज़मो 'पूटरोटॉट सार्वजनिक वर्ग गुण हैशटेबल <ऑब्जेक्ट, ऑब्जेक्ट> –

2

मानचित्र की सामग्री को स्ट्रिंग के रूप में स्वरूपित करें। JSON जैसे मानक प्रारूप का उपयोग करें। json-smart पुस्तकालय के साथ कुछ इस तरह दिखेगा:

String serializedMap = prop.getProperty("wordMap"); 
JSONObject json = (JSONObject) JSONValue.parse(serializedMap); 
Map<String, String> wordMap = new HashMap<>(); 

for (Map.Entry<String,Object> entry : json.entrySet()) { 
    wordMap.put(entry.getKey(), (String) entry.getValue()); 
} 
+0

ठीक है, धन्यवाद! क्या नक्शा उस कोड के साथ बनाया जाना है? गुण केवल एक पाठ फ़ाइल से अधिक है? क्योंकि विचार था कि लोग टेक्स्ट फ़ाइल में मानचित्र की सामग्री को कॉन्फ़िगर करने में सक्षम होंगे, अगर उन्हें ऐसा करने के लिए कोड चलाने की आवश्यकता है, तो इसमें शामिल करने में कोई बात नहीं है क्योंकि वे कोड – Lemonio

+1

कोड में डाल कथन भी बदल सकते हैं इस जवाब के पीछे यह था कि यदि आप एक ही संपत्ति में शब्द मानचित्र को संग्रहीत करना चाहते हैं, तो आपको इसे एक स्ट्रिंग के रूप में प्रारूपित करने की आवश्यकता होगी। जेएसओएन अच्छी लाइब्रेरी समर्थन के साथ एक मानक प्रारूप है, लेकिन चूंकि आप अंत उपयोगकर्ताओं को गुण फ़ाइल संपादित करने का इरादा रखते हैं JSON शायद सबसे अच्छा विकल्प नहीं है। बस अपने उपयोगकर्ताओं के लिए जो भी प्रारूप आपको लगता है, उसका उपयोग करें, और प्रारूपित करने के लिए कस्टम कोड लिखें और इसे पार्स करें। नक्शा = key1 = value1, key2 = value2, key3 = value4 ठीक काम करेगा, जब तक कि आपकी चाबियाँ और मानों में "=" या "," वर्ण न हो। – dnault

+0

इस उत्तर को पोस्ट करने के बाद, जैक्सन जेएसओएन [डी] क्रमबद्धता और डेटा बाइंडिंग के लिए मेरी पसंद की लाइब्रेरी बन गया है। – dnault

संबंधित मुद्दे