2016-07-18 5 views
5

नमूना कोड:जब आप जावा एपीआई का उपयोग कर गुण फ़ाइल उत्पन्न करते हैं तो कॉलन बैकस्लैश से बच निकले क्यों हैं?

public final class Test 
{ 
    public static void main(final String... args) 
     throws IOException 
    { 
     final Properties properties = new Properties(); 

     properties.setProperty("foo", "bar:baz"); 

     // Yeah, this supposes a Unix-like system 
     final Path path = Paths.get("/tmp/x.properties"); 

     try (
      // Requires Java 8! 
      final Writer writer = Files.newBufferedWriter(path); 
     ) { 
      properties.store(writer, null); 
     } 
    } 
} 

अब, जब मैं:

$ cat /tmp/x.properties 
# The date here 
foo=bar\:baz 

पेट के एक बैकस्लैश के साथ भाग कर रहा है। वास्तव में, सभी कोलन हैं।

अजीब बात यह है कि अगर मैं हाथ से गुण फ़ाइल उत्पन्न करता हूं और कोलन से बचें, तो गुणों को भी पढ़ा जाता है।

तो, Properties की लेखन प्रक्रिया क्यों है (यह मामला है कि आप Writer या OutputStream रास्ते से उपयोग करते हैं) इस तरह से बचें कॉलन?

+0

संदर्भ के लिए: यह '=', ':', '#' और '!' ([स्रोत] (http://grepcode.com/file/repository.grepcode.com/java) के लिए भी ऐसा ही करेगा /root/jdk/openjdk/6-b14/java/util/Properties.java#628))। –

+1

[यह लाइन] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/util/Properties.java#364) का तात्पर्य है कि एक अंतर है व्यवहार अगर व्यवहार से बच नहीं है। –

+0

क्योंकि यह दस्तावेज में होने के लिए निर्दिष्ट है। – EJP

उत्तर

2

में अन्य विकल्पों की जांच कर सकते Properties वर्ग के load विधि निम्नलिखित उल्लेख:

कुंजी के सभी शामिल हैं पहले गैर-सफेद अंतरिक्ष चरित्र से शुरू होने वाली रेखा में वर्ण और ऊपर तक, लेकिन इसमें शामिल नहीं है, पहला अनचाहे ' = ',': ', या लाइन टर्मिनेटर के अलावा सफेद स्पेस कैरेक्टर। इन सभी कुंजी समाप्ति वर्णों को पिछले बैकस्लैश वर्ण से बचकर कुंजी में शामिल किया जा सकता है;

...

उदाहरण के लिए, निम्न तीन पंक्तियों में से प्रत्येक को निर्दिष्ट कुंजी "द ट्रुथ" और संबद्ध तत्व मूल्य "सौंदर्य":

Truth = Beauty

Truth:Beauty

Truth :Beauty

इसलिए कोलन का उपयोग संपत्ति फ़ाइल में कुंजी के अंत को निर्धारित करने के लिए किया जा सकता है।

1

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

उदाहरण के लिए:

# Add spaces to the key 
key\ 2 = value for "key 2" 
# colon : 
key3: This is key 3 
#space 
key4 This is key 4 

आप wikipedia entry

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