खोज…


परिचय

गुण ऑब्जेक्ट में कुंजी और मान युग्म दोनों एक स्ट्रिंग के रूप में हैं। Java.util.Properties वर्ग हैशटेबल का उपवर्ग है।

इसका उपयोग संपत्ति कुंजी के आधार पर संपत्ति मूल्य प्राप्त करने के लिए किया जा सकता है। गुण वर्ग गुण फ़ाइल से डेटा प्राप्त करने और गुण फ़ाइल में डेटा संग्रहीत करने के लिए विधियाँ प्रदान करता है। इसके अलावा, इसका उपयोग प्रणाली के गुणों को प्राप्त करने के लिए किया जा सकता है।

गुण फ़ाइल का लाभ

यदि संपत्तियों की फ़ाइल से जानकारी बदली जाती है, तो रीकॉम्पिलेशन की आवश्यकता नहीं होती है: यदि किसी भी जानकारी से बदला जाता है

वाक्य - विन्यास

  • गुण फ़ाइल में:
  • कुंजी = मान
  • #टिप्पणी

टिप्पणियों

एक प्रॉपर्टी ऑब्जेक्ट एक मैप है जिसकी कुंजी और मूल्य सम्मेलन द्वारा स्ट्रिंग्स हैं। मानचित्र के तरीकों डेटा, अधिक प्रकार के सुरक्षित तरीकों का उपयोग करने के लिए इस्तेमाल किया जा सकता है getProperty , setProperty , और stringPropertyNames आमतौर पर बजाय प्रयोग किया जाता है।

गुण अक्सर जावा संपत्ति फ़ाइलों में संग्रहीत होते हैं, जो सरल पाठ फ़ाइलें हैं। उनका प्रारूप प्रॉपर्टीज लोड विधि में अच्छी तरह से प्रलेखित है। संक्षेप में:

  • प्रत्येक मुख्य / मान जोड़े सफेद स्थान के साथ पाठ की एक पंक्ति है, के बराबर होती है ( = ), या पेट के ( : ) कुंजी और मान के बीच। बराबरी या बृहदान्त्र में इसके पहले और बाद में व्हॉट्सएप की कोई भी मात्रा हो सकती है, जिसे अनदेखा किया जाता है।
  • अग्रणी व्हाट्सएप को हमेशा अनदेखा किया जाता है, व्हाट्सएप को पीछे छोड़ना हमेशा शामिल होता है।
  • एक बैकस्लैश का उपयोग किसी भी चरित्र से बचने के लिए किया जा सकता है (लोअरकेस u को छोड़कर)।
  • लाइन के अंत में एक बैकस्लैश इंगित करता है कि अगली लाइन वर्तमान लाइन की निरंतरता है। हालांकि, सभी लाइनों के साथ, निरंतरता लाइन में प्रमुख व्हाट्सएप को नजरअंदाज किया जाता है।
  • जावा स्रोत कोड की तरह, \u चार चार हेक्साडेसिमल अंकों के बाद एक UTF-16 वर्ण का प्रतिनिधित्व करता है।

जावा एसई की अपनी सुविधाओं जैसे java.util.ResourceBundle सहित अधिकांश चौखटे, संपत्ति फ़ाइलों को InputStream के रूप में लोड करते हैं। किसी इनपुट फ़ाइल को किसी इनपुटस्ट्रीम से लोड करते समय, उस फ़ाइल में केवल ISO 8859-1 अक्षर (यानी 0-255 रेंज के वर्ण) हो सकते हैं। किसी भी अन्य वर्णों को \u पलायन के रूप में दर्शाया जाना चाहिए। हालाँकि, आप किसी भी एन्कोडिंग में एक टेक्स्ट फ़ाइल लिख सकते हैं और आपके लिए भागने के लिए native2ascii टूल (जो हर JDK के साथ आता है) का उपयोग कर सकते हैं।

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

आप एक साधारण XML फ़ाइल में गुण भी संग्रहीत कर सकते हैं, जो फ़ाइल को ही एन्कोडिंग को परिभाषित करने की अनुमति देता है। ऐसी फाइल को लोडफ्रेमएक्सएमएल विधि से लोड किया जा सकता है। ऐसी XML फ़ाइलों की संरचना का वर्णन करने वाला DTD http://java.sun.com/dtd/properties.dtd पर स्थित है।

संपत्तियों को लोड कर रहा है

अपने आवेदन के साथ बंडल की गई फ़ाइल को लोड करने के लिए:

public class Defaults {

    public static Properties loadDefaults() {
        try (InputStream bundledResource =
            Defaults.class.getResourceAsStream("defaults.properties")) {

            Properties defaults = new Properties();
            defaults.load(bundledResource);
            return defaults;
        } catch (IOException e) {
            // Since the resource is bundled with the application,
            // we should never get here.
            throw new UncheckedIOException(
                "defaults.properties not properly packaged"
                + " with application", e);
        }
    }

}

संपत्ति फाइलें कैविएट: अनुगामी व्हॉट्सएप

इन दो संपत्ति फ़ाइलों पर एक करीब से नज़र डालें जो पूरी तरह से समान हैं:

यहाँ छवि विवरण दर्ज करें

सिवाय इसके कि वे वास्तव में समान नहीं हैं:

यहाँ छवि विवरण दर्ज करें

(स्क्रीनशॉट नोटपैड ++ से हैं)

पिछली श्वेत रिक्ति का मूल्य संरक्षित है के बाद से lastName होगा "Smith" पहले मामले में और "Smith " दूसरे मामले में।

बहुत कम ही ऐसा होता है जो उपयोगकर्ता अपेक्षा करते हैं और एक और केवल अनुमान लगा सकते हैं कि यह Properties वर्ग का डिफ़ॉल्ट व्यवहार क्यों है। हालाँकि इस समस्या को ठीक करने वाले Properties का एक उन्नत संस्करण बनाना आसान है। निम्न वर्ग, ट्राइम्डप्रोपरेट्स , बस यही करता है। यह मानक गुण वर्ग के लिए एक ड्रॉप-इन प्रतिस्थापन है।

import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.Map.Entry;
import java.util.Properties;

/**
 * Properties class where values are trimmed for trailing whitespace if the
 * properties are loaded from a file.
 *
 * <p>
 * In the standard {@link java.util.Properties Properties} class trailing
 * whitespace is always preserved. When loading properties from a file such
 * trailing whitespace is almost always <i>unintentional</i>. This class fixes
 * this problem. The trimming of trailing whitespace only takes place if the
 * source of input is a file and only where the input is line oriented (meaning
 * that for example loading from XML file is <i>not</i> changed by this class).
 * For this reason this class is almost in all cases a safe drop-in replacement
 * for the standard <tt>Properties</tt>
 * class.
 *
 * <p>
 * Whitespace is defined here as any of space (U+0020) or tab (U+0009).
 * * 
 */
public class TrimmedProperties extends Properties {

    /**
     * Reads a property list (key and element pairs) from the input byte stream.
     * 
     * <p>Behaves exactly as {@link java.util.Properties#load(java.io.InputStream) }
     * with the exception that trailing whitespace is trimmed from property values
     * if <tt>inStream</tt> is an instance of <tt>FileInputStream</tt>.
     * 
     * @see java.util.Properties#load(java.io.InputStream) 
     * @param inStream the input stream.
     * @throws IOException if an error occurred when reading from the input stream.
     */
    @Override
    public void load(InputStream inStream) throws IOException {
        if (inStream instanceof FileInputStream) {
            // First read into temporary props using the standard way
            Properties tempProps = new Properties();
            tempProps.load(inStream);
            // Now trim and put into target
            trimAndLoad(tempProps);
        } else {
            super.load(inStream);
        }
    }

    /**
     * Reads a property list (key and element pairs) from the input character stream in a simple line-oriented format. 
     * 
     * <p>Behaves exactly as {@link java.util.Properties#load(java.io.Reader)}
     * with the exception that trailing whitespace is trimmed on property values
     * if <tt>reader</tt> is an instance of <tt>FileReader</tt>.
     * 
     * @see java.util.Properties#load(java.io.Reader) }
     * @param reader the input character stream.
     * @throws IOException if an error occurred when reading from the input stream.
     */
    @Override
    public void load(Reader reader) throws IOException {
        if (reader instanceof FileReader) {
            // First read into temporary props using the standard way
            Properties tempProps = new Properties();
            tempProps.load(reader);
            // Now trim and put into target
            trimAndLoad(tempProps);
        } else {
            super.load(reader);
        }
    }

    private void trimAndLoad(Properties p) {
        for (Entry<Object, Object> entry : p.entrySet()) {
            if (entry.getValue() instanceof String) {
                put(entry.getKey(), trimTrailing((String) entry.getValue()));
            } else {
                put(entry.getKey(), entry.getValue());
            }
        }
    }

    /**
     * Trims trailing space or tabs from a string.
     *
     * @param str
     * @return
     */
    public static String trimTrailing(String str) {
        if (str != null) {
            // read str from tail until char is no longer whitespace
            for (int i = str.length() - 1; i >= 0; i--) {
                if ((str.charAt(i) != ' ') && (str.charAt(i) != '\t')) {
                    return str.substring(0, i + 1);
                }
            }
        }
        return str;
    }
}

XML के रूप में बचत गुण

एक XML फ़ाइल में भंडारण गुण

जिस तरह से आप गुण फाइलों को XML फ़ाइलों के रूप में संग्रहीत करते हैं, वह उसी तरह से है जिस तरह से आप उन्हें .properties फ़ाइलों के रूप में संग्रहीत करेंगे। store() का उपयोग करने के बजाय आप storeToXML() उपयोग करेंगे।

public void saveProperties(String location) throws IOException{
    // make new instance of properties
    Properties prop = new Properties();
    
    // set the property values
    prop.setProperty("name", "Steve");
    prop.setProperty("color", "green");
    prop.setProperty("age", "23");
    
    // check to see if the file already exists
    File file = new File(location);
    if (!file.exists()){
        file.createNewFile();
    }
    
    // save the properties
    prop.storeToXML(new FileOutputStream(file), "testing properties with xml");
}

जब आप फ़ाइल खोलेंगे तो यह इस तरह दिखेगा।

फ़ाइल का स्क्रीनशॉट बनाया गया

XML फ़ाइल से गुण लोड हो रहा है

अब इस फ़ाइल को उन properties रूप में load() करने के लिए जिन्हें आपको load() बजाय loadFromXML() को कॉल करने की आवश्यकता है जिसे आप नियमित .propeties फ़ाइलों के साथ उपयोग करेंगे।

public static void loadProperties(String location) throws FileNotFoundException, IOException{
    // make new properties instance to load the file into
    Properties prop = new Properties();
    
    // check to make sure the file exists
    File file = new File(location);
    if (file.exists()){
        // load the file
        prop.loadFromXML(new FileInputStream(file));
        
        // print out all the properties
        for (String name : prop.stringPropertyNames()){
            System.out.println(name + "=" + prop.getProperty(name));
        }
    } else {
        System.err.println("Error: No file found at: " + location);
    }
}

जब आप इस कोड को चलाते हैं तो आपको कंसोल में निम्नलिखित मिलेंगे:

age=23
color=green
name=Steve


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow