मुझे getClass().getResource("filename.txt")
विधि का उपयोग करने में समस्या थी । जावा डॉक्स निर्देशों को पढ़ने पर, यदि आपका संसाधन उसी पैकेज में नहीं है जिस वर्ग से आप संसाधन तक पहुंचने की कोशिश कर रहे हैं, तो आपको इसे सापेक्ष पथ देना होगा '/'
। अनुशंसित रणनीति को रूट निर्देशिका में "संसाधन" फ़ोल्डर के तहत अपनी संसाधन फ़ाइलों को रखना है। उदाहरण के लिए यदि आपके पास संरचना है:
src/main/com/mycompany/myapp
फिर आप मावेन द्वारा अनुशंसित संसाधन फ़ोल्डर जोड़ सकते हैं:
src/main/resources
इसके अलावा आप संसाधन फ़ोल्डर में सबफ़ोल्डर जोड़ सकते हैं
src/main/resources/textfiles
और कहते हैं कि आपकी फ़ाइल को myfile.txt
आपके पास बुलाया जाता है
src/main/resources/textfiles/myfile.txt
अब यहां वह जगह है जहां बेवकूफ पथ की समस्या आती है। कहो कि आपके पास एक वर्ग है com.mycompany.myapp package
, और आप myfile.txt
अपने संसाधन फ़ोल्डर से फ़ाइल तक पहुंचना चाहते हैं । कुछ लोग कहते हैं:
"/main/resources/textfiles/myfile.txt" path
या
"/resources/textfiles/myfile.txt"
ये दोनों गलत हैं। मेरे दौड़ने के बाद mvn clean compile
, फ़ाइलों और फ़ोल्डरों में कॉपी किया जाता है:
myapp/target/classes
फ़ोल्डर। लेकिन रिसोर्स फोल्डर नहीं है, सिर्फ रिसोर्स फोल्डर में फोल्डर हैं। मतलब आपके पास है:
myapp/target/classes/textfiles/myfile.txt
myapp/target/classes/com/mycompany/myapp
इसलिए getClass().getResource("")
विधि को देने का सही मार्ग है:
"/textfiles/myfile.txt"
यह रहा:
getClass().getResource("/textfiles/myfile.txt")
यह अब शून्य नहीं लौटेगा, बल्कि आपकी कक्षा को लौटा देगा। मुझे उम्मीद है कि इससे किसी को मदद मिलेगी। यह मेरे लिए अजीब है, कि "resources"
फ़ोल्डर को कॉपी नहीं किया गया है, लेकिन केवल सबफ़ोल्डर्स और सीधे "resources"
फ़ोल्डर में फ़ाइलें । यह मेरे लिए तर्कसंगत होगा कि "resources"
फ़ोल्डर भी नीचे पाया जाएगा"myapp/target/classes"