जावा वेब एप्लिकेशन में, मान लीजिए कि मैं XML फ़ाइल का इनपुटस्ट्रीम प्राप्त करना चाहता हूं, जिसे CLASSPATH में रखा गया है (यानी स्रोत फ़ोल्डर के अंदर ), मैं इसे कैसे करूं?
जवाबों:
ClassLoader.getResourceAsStream()
।
जैसा कि नीचे टिप्पणी में कहा गया है, यदि आप एक बहु- ClassLoader
वातावरण में हैं (जैसे इकाई परीक्षण, वेबैप, आदि) तो आपको उपयोग करने की आवश्यकता हो सकती है Thread.currentThread().getContextClassLoader()
। Http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream/2308388#comment21307593_2308388 देखें ।
InputStream is = new ClassPathResource("/path/to/your/file").getInputStream()
ClassLoader.class.getResourceAsStream("/path/file.ext");
java.lang.NullPointerException: null
new ClassPathResource("/path/to/your/file").getInputStream()
यह निर्भर करता है कि XML फ़ाइल कहाँ है। क्या यह स्रोत फ़ोल्डर में है ("डिफ़ॉल्ट पैकेज" या "रूट" में) या कक्षा के समान फ़ोल्डर में?
पूर्व के मामले में, आपको इसका उपयोग करना चाहिए "/file.xml
फ़ाइल खोजने के " (प्रमुख स्लैश पर ध्यान दें) का और यह कोई फर्क नहीं पड़ता कि आप इसे खोजने की कोशिश करने के लिए किस वर्ग का उपयोग करते हैं।
यदि XML फ़ाइल कुछ वर्ग के बगल में है, तो SomeClass.class.getResourceAsStream()
केवल फ़ाइल नाम जाने का तरीका है।
मैंने प्रस्तावित समाधान की कोशिश की और फ़ाइल नाम में फॉरवर्ड स्लैश ने मेरे लिए काम नहीं किया, उदाहरण: ... ()। GetResourceAsStream ("/ my.properties"); नल लौटा दिया गया
स्लैश को हटाकर काम किया गया: .... getResourceAsStream ("my.properties");
यहाँ डॉक्टर एपीआई से है: प्रतिनिधिमंडल से पहले, इस एल्गोरिथ्म का उपयोग करके दिए गए संसाधन नाम से एक निरपेक्ष संसाधन नाम का निर्माण किया जाता है:
If the name begins with a '/' ('\u002f'), then the absolute name of the resource is the portion of the name following the '/'.
Otherwise, the absolute name is of the following form:
modified_package_name/name
Where the modified_package_name is the package name of this object with '/' substituted for '.' ('\u002e').
null
बिना/
। स्लैश चरित्र को जोड़ने से मेरे लिए काम किया। @ हुसैन-तेरे और मेरे सेटअप और आपके सेटअप के बीच कुछ और अंतर होना चाहिए।