2011-11-30 14 views
11

मेरे पास एक एकल यूटीएफ -8 एन्कोडेड स्ट्रिंग है जो कुंजी + वैल्यू जोड़े की एक श्रृंखला है जिसे गुण वस्तु में लोड किया जाना आवश्यक है। मैंने देखा कि मुझे अपने आंतरिक कार्यान्वयन के साथ गड़बड़ वाले पात्र मिल रहे थे और थोड़ी सी गुगल के बाद मुझे यह Question मिला जो इंगित करता था कि मेरी समस्या क्या थी - मूल रूप से गुण आईएसओ -885 9 -1 का उपयोग करके डिफ़ॉल्ट रूप से हैं। यह कार्यान्वयनयूटीएफ -8 गुणों में जावा स्ट्रिंग को एन्कोड किया गया

public Properties load(String propertiesString) { 
     Properties properties = new Properties(); 
     try { 
      properties.load(new ByteArrayInputStream(propertiesString.getBytes())); 
     } catch (IOException e) { 
      logger.error(ExceptionUtils.getFullStackTrace(e)); 
     } 
     return properties; 
    } 

कोई एन्कोडिंग निर्दिष्ट नहीं है, इसलिए मेरी समस्या। मेरे प्रश्न के लिए, मैं Reader/InputStream संयोजन को Properties.load() पर जाने के लिए चेन/बनाने के लिए कैसे पता लगा सकता हूं जो propertiesString प्रदान करता है और एन्कोडिंग निर्दिष्ट करता है। मुझे लगता है कि यह ज्यादातर I/O धाराओं में मेरी अनुभवहीनता और java.io पैकेज में आईओ उपयोगिताओं की प्रतीत होता है।

किसी भी सलाह की सराहना की।

उत्तर

13

तारों के साथ काम करते समय Reader का उपयोग करें। InputStream एस वास्तव में बाइनरी डेटा के लिए हैं।

public Properties load(String propertiesString) { 
    Properties properties = new Properties(); 
    properties.load(new StringReader(propertiesString)); 
    return properties; 
} 
+0

कि निर्माता मौजूद नहीं है। – BalusC

+0

धन्यवाद, मैंने चेकआउट [स्ट्रिंग रीडर] (http://docs.oracle.com/javase/6/docs/api/java/io/StringReader.html) किया, लेकिन मैंने ऐसा कोई कन्स्ट्रक्टर नहीं देखा। – markdsievers

+0

चीयर्स मैट, बस इस समाधान को सफलतापूर्वक आजमाया। शुरुआत में स्ट्रिंग रीडर का उपयोग नहीं किया क्योंकि मेरे एन्कोडिंग पर नियंत्रण की तलाश में मेरे अंधेरे थे। आपकी सहायता के लिए बहुत बहुत धन्यवाद। अपवोट + मेरे दोस्त को स्वीकार करें। – markdsievers

1

इस प्रयास करें:

ByteArrayInputStream bais = new ByteArrayInputStream(propertiesString.getBytes("UTF-8")); 
properties.load(bais); 
+1

एंड्रॉइड-9 की तुलना में पुराने एंड्रॉइड एसडीके का समर्थन करने के लिए मुझे 'स्ट्रिंग रीडर' के बजाय इसका उपयोग करना पड़ा। –

1
private Properties getProperties() throws IOException { 
     ClassLoader classLoader = getClass().getClassLoader(); 
     InputStream input = classLoader.getResourceAsStream("your file"); 
     InputStreamReader inputStreamReader = new InputStreamReader(input, "UTF-8"); 
     Properties properties = new Properties(); 
     properties.load(inputStreamReader); 
     return properties; 
    } 

तो उपयोग

System.out.println(getProperties().getProperty("key")) 
संबंधित मुद्दे