एक वर्गपथ संसाधन (XML फ़ाइल) से इनपुटस्ट्रीम प्राप्त करना


81

जावा वेब एप्लिकेशन में, मान लीजिए कि मैं XML फ़ाइल का इनपुटस्ट्रीम प्राप्त करना चाहता हूं, जिसे CLASSPATH में रखा गया है (यानी स्रोत फ़ोल्डर के अंदर ), मैं इसे कैसे करूं?

जवाबों:


99

ClassLoader.getResourceAsStream()

जैसा कि नीचे टिप्पणी में कहा गया है, यदि आप एक बहु- ClassLoaderवातावरण में हैं (जैसे इकाई परीक्षण, वेबैप, आदि) तो आपको उपयोग करने की आवश्यकता हो सकती है Thread.currentThread().getContextClassLoader()Http://stackoverflow.com/questions/2308188/getresourceasstream-vs-fileinputstream/2308388#comment21307593_2308388 देखें ।


कोड उदाहरण के लिए व्यक्तिगत पोस्ट देखें: tshikatshikaaa.blogspot.nl/2012/07/…
Jérôme Verstrynge

14
यदि आप एक बहु क्लास लोडर वातावरण में हैं (जैसे यूनिट परीक्षण / वेबएप आदि), तो आपको इस Thread.currentThread () .CCtetextClassLoader () का उपयोग करने की आवश्यकता हो सकती है। देखें stackoverflow.com/questions/2308188/...
khylo

कृपया अपने उत्तर में @ khylo का सुझाव जोड़ें!
फ्रैगिन्वेशन

8
दूसरा तरीका:InputStream is = new ClassPathResource("/path/to/your/file").getInputStream()
ज़ुगुवेई

1
@zhuguowei ClassPathResource एक स्प्रिंग क्लास है।
इचल hal

31
ClassLoader.class.getResourceAsStream("/path/file.ext");

लेकिन अगर इस तरह से java.lang.NullPointerException: null new ClassPathResource("/path/to/your/file").getInputStream()
टॉमकैट

क्या आप बता सकते हैं कि ओ इसे युद्ध में कैसे उपलब्ध
विक्रम सैनी

मेरे तैनात होने पर मुझे वही समस्या हुई। किसी को भी इस स्थिति का हल मिल सकता है?
अगस्तो

12

यह निर्भर करता है कि XML फ़ाइल कहाँ है। क्या यह स्रोत फ़ोल्डर में है ("डिफ़ॉल्ट पैकेज" या "रूट" में) या कक्षा के समान फ़ोल्डर में?

पूर्व के मामले में, आपको इसका उपयोग करना चाहिए "/file.xml फ़ाइल खोजने के " (प्रमुख स्लैश पर ध्यान दें) का और यह कोई फर्क नहीं पड़ता कि आप इसे खोजने की कोशिश करने के लिए किस वर्ग का उपयोग करते हैं।

यदि XML फ़ाइल कुछ वर्ग के बगल में है, तो SomeClass.class.getResourceAsStream()केवल फ़ाइल नाम जाने का तरीका है।


11

ClassLoader.class.getResourceAsStream("/path/to/your/xml") और सुनिश्चित करें कि आपकी संकलित स्क्रिप्ट xml फ़ाइल को आपके CLASSPATH में कॉपी कर रही है।



4

इस उत्तर में "getResourceAsStream ()" विकल्पों में से कुछ ने मेरे लिए काम नहीं किया, लेकिन इसने किया:

SomeClassWithinYourSourceDir.class.getClassLoader ()। GetResourceAsStream ("yourResource");


0

मैंने प्रस्तावित समाधान की कोशिश की और फ़ाइल नाम में फॉरवर्ड स्लैश ने मेरे लिए काम नहीं किया, उदाहरण: ... ()। 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 बिना/ । स्लैश चरित्र को जोड़ने से मेरे लिए काम किया। @ हुसैन-तेरे और मेरे सेटअप और आपके सेटअप के बीच कुछ और अंतर होना चाहिए।
अजा भाटिया
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.