2009-02-19 12 views
32

हालांकि java.util.properties गुण फ़ाइल पढ़ने और लिखने की अनुमति देता है, लेखन स्वरूपण को संरक्षित नहीं करता है। आश्चर्य की बात नहीं है, क्योंकि यह संपत्ति फ़ाइल से जुड़ा हुआ नहीं है।संपत्ति फ़ाइलों को अद्यतन करने के लिए एक बेहतर वर्ग?

क्या वहां कोई संपत्तिफाइल क्लास है - या कुछ ऐसे - जो टिप्पणियों और रिक्त रेखाओं को सुरक्षित रखता है और संपत्ति मूल्यों को अद्यतन करता है?

उत्तर

44

यह अपाचे के कॉमन्स Configuration एपीआई से काफी बेहतर नहीं है। यह संपत्ति फ़ाइलों, एक्सएमएल, जेएनडीआई, जेडीबीसी डेटा स्रोतों, आदि से कॉन्फ़िगरेशन के लिए एक एकीकृत दृष्टिकोण प्रदान करता है

यह संपत्ति फ़ाइलों का संचालन बहुत अच्छा है। यह आपको अपनी संपत्ति से PropertiesConfigurationLayout ऑब्जेक्ट उत्पन्न करने की अनुमति देता है जो आपकी संपत्ति फ़ाइल के बारे में अधिक जानकारी (व्हाइटस्पेस, टिप्पणियां इत्यादि) को सुरक्षित रखता है। जब आप संपत्ति फ़ाइल में परिवर्तनों को सहेजते हैं, तो इन्हें जितना संभव हो उतना सुरक्षित रखा जाएगा।


नमूना कोड:

import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.InputStreamReader; 

import org.apache.commons.configuration.ConfigurationException; 
import org.apache.commons.configuration.PropertiesConfiguration; 
import org.apache.commons.configuration.PropertiesConfigurationLayout; 

public class PropertiesReader { 
    public static void main(String args[]) throws ConfigurationException, FileNotFoundException { 
     File file = new File(args[0] + ".properties"); 

     PropertiesConfiguration config = new PropertiesConfiguration(); 
     PropertiesConfigurationLayout layout = new PropertiesConfigurationLayout(config); 
     layout.load(new InputStreamReader(new FileInputStream(file))); 

     config.setProperty("test", "testValue"); 
     layout.save(new FileWriter("path\\to\\properties\\file.properties", false)); 
    } 
} 

भी देखें:

+0

यह बहुत अच्छा काम करता है और वहां टिप्पणियां रखता है। कुछ नमूना कोड जोड़ने की स्वतंत्रता लीजिए :) –

+7

आपूर्ति कोड संकलित नहीं करता है .. propsFile घोषित नहीं किया गया है – blank

+0

क्या होगा यदि आपके पास Spring.Names = cookie @! Jar @! जॉनसन @! जेम्स @! हरा जैसे महत्वपूर्ण मूल्य हैं @! पैट्रिक। पैट्रिक के बाद आप "जिमी" कैसे जोड़ेंगे? – Jesse

6

आप Apache Commons Configuration पर एक नज़र डाल सकते हैं, जिसमें PropertiesConfiguration कक्षा शामिल है। लेकिन, जैसा कि मैं इसे इस्तेमाल नहीं किया है, मैं अगर यह टिप्पणियों और प्रारूपण सुरक्षित रखने नहीं पता ...

हालांकि, यह worthes एक कोशिश ...

+0

दस्तावेज़ों के अनुसार, "PropertiesConfigurationLayout" कक्षा स्वरूपण और टिप्पणियों को सुरक्षित रखेगी। –

0

मैं एक बार ऐसा करने एक वर्ग देखा आईएनआई फाइलों के साथ अब लिंक नहीं मिल रहा है। अगर आपको कुछ और नहीं मिल रहा है, तो आप DecentXML आज़मा सकते हैं। मैंने इस एक्सएमएल पार्सर को मूल स्वरूपण 100% (यानी टिप्पणियों के साथ, तत्वों में अजीब रिक्त स्थान या रूट तत्व के चारों ओर, सब कुछ) को संरक्षित करने के लिए विशिष्ट डिज़ाइन लक्ष्य के साथ लिखा है।

परिणामस्वरूप XML दस्तावेज़ को पार्स करने के दौरान, आपको केवल उन तत्वों को याद रखना होगा जिनमें आपके विकल्पों के लिए मूल्य शामिल है और उनमें टेक्स्ट नोड को प्रतिस्थापित करें। जब आप बचाते हैं, तो किसी भी तरह से छेड़छाड़ नहीं की जाएगी।

4

अपाचे कॉमन्स विन्यास librar प्रयोग करने के लिए नमूना कोड पैट्रिक बूस द्वारा योगदान वाई अनावश्यक रूप से जटिल है। आपको प्रॉपर्टी कॉन्फ़िगरेशन का उपयोग करने की आवश्यकता नहीं है जब तक आपको आउटपुट पर कुछ उन्नत नियंत्रण की आवश्यकता न हो।

PropertiesConfiguration config = new PropertiesConfiguration("myprops.properties"); 
config.setProperty("Foo", "Bar"); 
config.save(); 

(नोट::।। इस कोड को मौजूदा 1.10 स्थिर संस्करण के लिए काम करता है मैं जाँच नहीं की है, तो यह काम करता है पर 2.0 अल्फा वर्तमान में उपलब्ध बनाता है)

+0

यह काम किया।लेकिन मुद्दा यह है कि, हमें कुंजी = मूल्य जोड़ी में "=" के बाद एक स्थान मिल रहा है, जो अवांछित है। क्योंकि मेरे पास मूल्य की आवश्यकता नहीं है। उदाहरण: test = xyz गुण फ़ाइल में मान है। लेकिन उपर्युक्त कोड चलाने के बाद, मुझे test = xyz मिल रहा है। मुझे 'xyz' –

+0

से पहले अंतरिक्ष की आवश्यकता नहीं है यह संस्करण 2.1.1 के साथ काम नहीं करता है, सेटप्रोपर्टी को छोड़कर इन विधियों में मौजूद नहीं है। हालांकि मुझे पता है कि उन्होंने इस तरह के सुरुचिपूर्ण तरीकों को क्यों हटाया है, जैसे 'सेव() '... :( – GOXR3PLUS

1
अपने आप में PropertiesConfiguration टिप्पणियों और स्वरूपण को संरक्षित करने के लिए पर्याप्त है
File file = new File("src/test/resources/1automation.properties"); 
    PropertiesConfiguration config = new PropertiesConfiguration(); 
    PropertiesConfigurationLayout layout = new PropertiesConfigurationLayout(config); 
    layout.load(new InputStreamReader(new FileInputStream(file))); 
    FileWriter fw = new FileWriter("src/test/resources/1automation.properties",false); 
    config.setProperty("myssi.admin.name", "testValue"); 
    layout.save(fw); 
+0

यह काम करता है। लेकिन मुद्दा यह है कि, हमें कुंजी = मूल्य जोड़ी में" = "के बाद एक स्थान मिल रहा है, जो अवांछित है। क्योंकि मेरे पास मूल्य की आवश्यकता नहीं है। उदाहरण: test = xyz गुण फ़ाइल में मूल्य है। लेकिन उपरोक्त कोड चलाने के बाद, मुझे test = xyz मिल रहा है। मुझे 'xyz' –

+0

से पहले स्थान की आवश्यकता नहीं है मेरी टिप्पणी थोड़ा देर हो सकती है, लेकिन आप हमेशा अवांछित रिक्त स्थान को हटाने के लिए 'trim()' का उपयोग कर सकते हैं। –

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