2008-09-19 12 views
24

मुझे फ़ाइल में कुछ साधारण गुणों को स्टोर करने और रूबी से उन्हें एक्सेस करने की आवश्यकता है।जावा .properties फ़ाइल रूबी के बराबर है?

मुझे जावा में ऐसी चीजों के लिए मानक है (java.util.Properties क्लास का उपयोग करके) .properties फ़ाइल प्रारूप से बिल्कुल प्यार है ... यह आसान, उपयोग करने में आसान और पढ़ने में आसान है।

तो, क्या वहां कोई रूबी क्लास है जो मुझे फ़ाइल से कुछ महत्वपूर्ण मूल्य जोड़ों को लोड करने देगी, जैसे कि बहुत सारे प्रयास किए बिना?

मैं एक्सएमएल का उपयोग नहीं करना चाहता, इसलिए कृपया आरईएक्सएमएल का सुझाव न दें (मेरा उद्देश्य "कोण ब्रैकेट कर" की गारंटी नहीं देता है)।

मैंने अपना खुद का समाधान रोल करने पर विचार किया है ... यह शायद कोड शीर्ष के बारे में 5-10 लाइनों की होगी, लेकिन मैं अभी भी मौजूदा पुस्तकालय का उपयोग करूंगा (यदि यह अनिवार्य रूप से एक फ़ाइल से बनाया गया है)। । के रूप में है कि यह 1 लाइन के लिए नीचे लाना होगा ....


अद्यतन: यह वास्तव में एक सीधी रूबी अनुप्रयोग, नहीं रेल है, लेकिन मुझे लगता है कि अच्छी तरह से YAML करना होगा (यह मेरे मन की पीठ में था, लेकिन मैं इसके बारे में भूल गया था ... देखा है लेकिन अभी तक कभी नहीं उपयोग किया है), सभी को धन्यवाद!

उत्तर

26

क्या यह रेल आवेदन या रुबी के लिए है?

वास्तव में या तो आप यम फ़ाइल में अपनी संपत्तियों को चिपकाने में सक्षम हो सकते हैं और फिर YAML::Load(File.open("file")) इसे कर सकते हैं। माइक स्टोन से


नोट: यह वास्तव में बेहतर होगा करने के लिए:

File.open("file") { |yf| YAML::load(yf) } 

या

YAML.load_file("file") 

माणिक डॉक्स के रूप में सुझाव देते हैं, अन्यथा फ़ाइल नहीं होगा कचरा संग्रह तक बंद, लेकिन अच्छा सुझाव चाहे :-)

+0

मैंने इनलाइन को संपादित किया क्योंकि टिप्पणी शायद नहीं देखी जाएगी ... –

+0

हाँ, यह एसओ के साथ एक समस्या है इसलिए टिप्पणियां अदृश्य लगती हैं ... अदृश्य। मैंने इसे ब्लॉक में करने के बारे में नहीं सोचा, शानदार! –

2

इसके बजाए कॉन्फ़िगरेशन फ़ाइल की .properties शैली की, आप YAML का उपयोग करने पर विचार कर सकते हैं। YAML डेटाबेस कॉन्फ़िगरेशन के लिए रेल पर रूबी में उपयोग किया जाता है, और अन्य भाषाओं (पायथन, जावा, पर्ल, और अन्य) में लोकप्रियता में प्राप्त हुआ है।

रूबी YAML मॉड्यूल का अवलोकन यहाँ है: http://www.ruby-doc.org/core/classes/YAML.html

और YAML के मुख पृष्ठ यहाँ है: http://yaml.org

3

देवेंद्र Gollapally एक class लिखा ठीक करने के लिए:

... हालांकि मैं एक वाईएएमएल फ़ाइल का उपयोग करने के लिए बेहतर अनुशंसा करता हूं।

6

वाईएएमएल ऊपर वर्णित अनुसार इसे पूरी तरह से करेगा। एक उदाहरण के लिए, मेरी रूबी लिपियों में से एक में मैं की तरह एक YAML फ़ाइल है:

migration: 
    customer: Example Customer 
    test:  false 
sources: 
- name:  Use the Source 
    engine: Foo 
- name:  Sourcey 
    engine: Bar 

जो मैं तो के रूप में रूबी के भीतर का उपयोग करें:

config = YAML.load_file(File.join(File.dirname(__FILE__), ARGV[0])) 
puts config['migration']['customer'] 

config['sources'].each do |source| 
    puts source['name'] 
end 
9

एक अन्य विकल्प के लिए बस के रूप में एक और रूबी फ़ाइल का उपयोग करने के लिए है अपने विन्यास फाइल।

उदाहरण के लिए, एक फ़ाइल 'विकल्प'

{ 
    :blah => 'blee', 
    :foo => 'bar', 
    :items => ['item1', 'item2'], 
    :stuff => true 
} 

और फिर अपने रूबी कोड में की तरह कुछ करना कहा जाता है बनाने के लिए:

ops = eval(File.open('options') {|f| f.read }) 
puts ops[:foo] 
+2

क्या यह विकल्प दुरुपयोग के लिए संभावित नहीं है? eval किसी भी मनमानी रूबी कोड निष्पादित करेगा जैसे कि, उदाहरण के लिए, फाइल सिस्टम के लिए बुरा चीजें किया जा सकता है। – Straff

+2

दुर्व्यवहार अगर आप किसी अविश्वसनीय स्रोत से वेब फ़ॉर्म जैसे कोड को बेदखल कर रहे हैं, तो यह उत्तर एक विकल्प फ़ाइल पढ़ने के बारे में एक प्रश्न के लिए है। अगर कोई उस के साथ झुकाव करना चाहता था, तो वे इसे पढ़ने वाले रूबी कोड के साथ टिंकर करने की स्थिति में भी होंगे ... –

+0

+1: मुझे आपकी आउट ऑफ़ द बॉक्स सोच पसंद है। –

3

inifile - http://rubydoc.info/gems/inifile/2.0.2/frames बुनियादी .properties फ़ाइलों का समर्थन है और यह भी होगा [सेक्शन] के साथ .ini फाइलें उदाहरण के लिए। समस्याओं का कारण हो सकता है यदि फ़ाइलें प्रोग्रामर द्वारा नहीं रखा जाता है - जब आपके डेटा जटिल संरचना है, लेकिन रिक्त स्थान, टैब, लाइनों आदि के अंत के साथ बारीकियों हो सकता है

[SECTION] 
key=value 

YAML अच्छा है। इसके विपरीत .properties और .ini फ़ाइलें अधिक क्षमाशील हैं और यदि आपको वाईएएमएल के माध्यम से उपलब्ध गहरी संरचना की आवश्यकता नहीं है तो उपयुक्त हो सकता है।

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