2013-03-03 8 views
8

मैं एक संसाधन है कि एक .JAR में शामिल किया जाएगा पढ़ने के लिए कोशिश कर रहा हूँ के साथ एक संसाधन पढ़ना, लेकिन मैं निम्नलिखित के लिए एक nullPointer मिलती है:BufferedReader

bReader = new BufferedReader(new InputStreamReader(
        this.getClass().getResourceAsStream("resources/" + fileName))); 

लेकिन एक फ़ाइल का उपयोग करना, ठीक काम करता है ..

bReader = new BufferedReader(new FileReader(new File("resources/" + fileName))); 
+0

क्या आप कृपया त्रुटि के स्टैक ट्रेस को प्रिंट कर सकते हैं। – christopher

+1

'this.getClass()' का पूरी तरह से उद्धृत नाम क्या है, और जार में फ़ाइल कहां है? –

+0

थ्रेड में अपवाद "एडब्ल्यूटी-इवेंट क्यूयू -0" java.lang.NullPointerException \t java.io.Reader पर। (Reader.java:61) \t java.io.InputStreamReader पर। (इनपुटस्ट्रीम रीडर.जावा:55) – Skogen

उत्तर

14

अपना आईडीई या मेवेन या निर्माण प्रक्रिया मानते हुए जार में "संसाधन" की सामग्री शामिल होगी, इसे "/" पर ढूंढने का प्रयास करें।

bReader = new BufferedReader(new InputStreamReader(
          this.getClass().getResourceAsStream("/" + fileName))); 

अद्यतन:

यकीन है कि "संसाधन" फ़ोल्डर स्रोत फ़ोल्डर के रूप में विन्यस्त किया गया है।

+0

मैं ग्रहण का उपयोग कर रहा हूं, और मुझे ग्रहण में चलते समय NullPointer मिलता है। .jar के पास इस समस्या के अलावा कुछ भी नहीं है, इस तथ्य के अलावा कि अगर मैं अंत में .jar बनाने की कोई योजना नहीं रखता, तो मैं फ़ाइल के लिए उदाहरण का उपयोग करता। – Skogen

+0

यदि फ़ाइल प्रोजेक्ट फ़ोल्डर में ड्रैग-गिराए गए हैं, तो मैं फ़ाइल को "/" का उपयोग कर पा सकता हूं, लेकिन फिर यह निष्पादन योग्य जार से नहीं पाया जा सकता है। – Skogen

+0

@ स्कोजन: अद्यतन देखें। – sgp15

-1

this.getClass().getResourceAsStream("resources/" + fileName) क्लासपाथ से new File("resources/" + fileName) लोड फ़ाइल को आपके काम डीआईआर (प्रोजेक्ट रूट डीआईआर ग्रहण में) से लोड करता है। पूर्व कार्य करने के लिए, आपको जार जोड़ने की आवश्यकता है जिसमें resources डीआईआर आपके क्लासपाथ में है।

+0

नई फ़ाइल ("संसाधन /" + फ़ाइल नाम) workiong नहीं है। – USer22999299

0

क्या यह एक स्प्रिंग फ्रेमवर्क प्रोजेक्ट है? प्रयास करें: लोड करने के लिए

BufferedReader bufferedReader = new BufferedReader(
      new InputStreamReader(new ClassPathResource("XML_Request.xml").getInputStream())); 

संसाधन src/मुख्य/संसाधन निर्देशिका में बैठा है: एक संसाधन फ़ोल्डर के रूप में

Resource to load is sitting in the src/main/resources directory

0

सेट "संसाधन" फ़ोल्डर।

bReader = new BufferedReader(new 
     InputStreamReader(getClass().getClassLoader().getResourceAsStream(fileName))) 
0

getClassLoader().getResourceAsStream(filename) के विपरीत, संस्करण आप getClass().getResourceAsStream(filename) उपयोग कर रहे हैं, वर्ग के स्थान पर एक पथ रिश्तेदार का उपयोग करता है बल्कि classpath जड़ से: इस कोड का प्रयास करें। आपको या तो पूर्ण पथ getClass().getResourceAsStream("/" + filename) का उपयोग करने या ClassLoader संस्करण का उपयोग करने की आवश्यकता है।

साथ ही, सुनिश्चित करें कि आपके क्लासपाथ पर "संसाधन" है (यदि आप मेवेन का उपयोग कर रहे हैं, तो यह आपके pom.xml से संबंधित "src/main/resource" होना चाहिए)। यदि ऐसा है, तो आपको वास्तव में अपने फ़ाइल नाम में "संसाधन" शामिल करने की आवश्यकता नहीं है, क्योंकि वह क्लासपाथ रूट है।

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