2010-03-26 8 views
7

Hiii ... मैं getSystemResourceAsStream() का उपयोग कर इंटरेस्टस्ट्रीम क्लास ऑब्जेक्ट में गुण फ़ाइल की सामग्री प्राप्त करना चाहता हूं। मैंने नमूना कोड बनाया है। यह मुख्य() विधि का उपयोग करके अच्छी तरह से काम करता है, लेकिन जब मैं प्रोजेक्ट को तैनात करता हूं और सर्वर पर चलाता हूं, गुण फ़ाइल पथ प्राप्त नहीं किया जा सकता है ... इसलिए इनपुटस्ट्रीम ऑब्जेक्ट स्टोर शून्य मान।getSystemResourceAsStream() शून्य

नमूना कोड यहाँ है ..

public class ReadPropertyFromFile { 

    public static Logger logger = Logger.getLogger(ReadPropertyFromFile.class); 

    public static String readProperty(String fileName, String propertyName) { 
     String value = null; 
     try { 
      //fileName = "api.properties"; 
      //propertyName = "api_loginid"; 

      System.out.println("11111111...In the read proprty file....."); 


      // ClassLoader loader = ClassLoader.getSystemClassLoader(); 

      InputStream inStream = ClassLoader.getSystemResourceAsStream(fileName); 

      System.out.println("In the read proprty file....."); 
      System.out.println("File Name :" + fileName); 
      System.out.println("instream = "+inStream); 

      Properties prop = new Properties(); 

      try { 
       prop.load(inStream); 
       value = prop.getProperty(propertyName); 
      } catch (Exception e) { 
       logger.warn("Error occured while reading property " + propertyName + " = ", e); 
       return null; 
      } 
     } catch (Exception e) { 
      System.out.println("Exception = " + e); 
     } 
     return value; 
    } 

    public static void main(String args[]) { 

     System.out.println("prop value = " + ReadPropertyFromFile.readProperty("api.properties", "api_loginid")); 
    } 
} 
+2

सामान्य श्रेणी की बजाय सिस्टम क्लासलोडर का उपयोग क्यों कर रहे हैं? – skaffman

उत्तर

1

बजाय 'getSystemResourceAsStream()' getResourceAsStream() का उपयोग करें।

6

SystemClassLoader सिस्टम चर CLASSPATH पर java.class.path चुड़ैल मानचित्र से संसाधन लोड करता है। आपके स्थानीय एप्लिकेशन में, संभवत: आपके पास java.class.path चर में कॉन्फ़िगर करने के लिए संसाधन संसाधन है। सर्वर में, यह एक और कहानी है क्योंकि शायद सर्वर आपके संसाधनों को किसी अन्य वर्ग लोडर से लोड करता है।

getClass().getResourceAsStream(fileName); 

यह article भी उपयोगी हो सकती:

का उपयोग कर ClassLoader कि सही रास्ते का उपयोग कर वर्ग लोड की कोशिश।

+0

getClass()। GetResourceAsStream ("input.properties"); मेरे लिए काम किया संसाधन उस वर्ग की उसी निर्देशिका पर है जिसका उपयोग कर रहा है –

15

मैं परियोजना तैनाती और सर्वर पर चलाने के लिए,

यह एक JSP/Servlet WebApplication तरह लगता है।

ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 

यह एक सभी classpath रास्तों प्रश्न में WebApplication से बंधा तक पहुँच गया है और इसके बाद आप जो माता-पिता पर निर्भर नहीं कर रहे हैं: उस मामले में, आप इस प्रकार ClassLoader जो प्राप्त किया जाता है उपयोग करने की आवश्यकता क्लासलोडर (एक वेबपैप में एक से अधिक है!) ने आपकी कक्षा को लोड किया है।

फिर, इस क्लासलोडर पर, आपको कक्षा के रूप में क्लासपाथ संसाधन प्राप्त करने के लिए getResourceAsStream() पर कॉल करने की आवश्यकता है, न कि getSystemResourceAsStream() जो कि वेबप्लिकेशंस कैसे शुरू किया गया है इस पर निर्भर है।

InputStream input = classLoader.getResourceAsStream("filename.extension"); 

यह अंत में अपने प्रारंभिक getSystemResourceAsStream() दृष्टिकोण से अधिक मजबूत है और Class#getResourceAsStream() के रूप में दूसरों ने सुझाव दिया: आप बाहरी होस्टिंग पर यह पर कोई नियंत्रण नहीं के बाद से और साथ ही उस पर निर्भर होना नहीं करना चाहती।

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

  • कोई संबंधित समस्या नहीं^_^