वर्ग लोड हो रहा है विधियों के बीच अंतर के बारे में एक लोकप्रिय answer में, जॉन स्कीट ने कहा है,क्लासलोडर संसाधन पथ हमेशा पूर्ण होते हैं?
classloader संसाधन पथ हमेशा पूर्ण माना जाता है।
एक और भी लोकप्रिय answer इस कथन को एक उदाहरण के साथ पुष्टि करता है।
ClassLoader.getResourceAsStream(path)
सभी रास्तों पर विचार पूर्ण पथ होना करने के लिए होगा। तोString.getClassLoader().getResourceAsString("myfile.txt")
औरString.getClassLoader().getResourceAsString("/myfile.txt")
दोनों दोनों अपने क्लासपाथ में निम्न स्थान पर एक फ़ाइल की तलाश करेंगे:./myfile.txt
।
इस तथ्य को खारिज करते हुए कि उदाहरण संकलित नहीं होगा, सर्वसम्मति से संकेत मिलता है कि एक अग्रणी फॉरवर्ड स्लैश क्लासलोडर के लिए अप्रासंगिक है।
एक साधारण परीक्षण अन्यथा दिखाता है।
Foo.class.getClassLoader().getResource("test.xml") // file
Foo.class.getClassLoader().getResource("/test.xml") // null
मैं बस पथ files/test.xml
एक परीक्षण परियोजना के classpath के लिए, एक वर्ग के साथ नामित किया गया Foo
एक main()
विधि उन दो कॉल के परिणामों को प्रिंट युक्त जोड़ लिया है। मुझे क्या याद आ रहा है, क्योंकि सैकड़ों लोगों ने उपर्युक्त उत्तरों को वोट दिया है? क्या क्लासलोडर्स पूर्ण हैं, या वे इनपुट नाम की संरचना पर निर्भर करते हैं?
यह Oracle blog post मेरी समझ के लिए उपयोगी था।
विधि जो संसाधन नाम से यूआरएल बनाती है वह URLClassPath.JarLoader.checkResource() है।
मेरे अनुभव से, संसाधन की राह क्या आप इसे देने पर निर्भर है "jar file URL" के लिए मामला है। उदाहरण के लिए '/ myfile.txt'' {classpath}/myfile.txt' की तलाश करेगा, लेकिन 'myfile.txt'' {classpath}/{class package path}/myfile.txt' की तलाश करेगा, जहां '{class पैकेज पथ} 'यह अनुरोध करने के लिए उपयोग किए जाने वाले वर्ग का पैकेज पथ है, यह कहकर कि यह 'GetResource' का उपयोग करने के तरीके के आधार पर बदल जाएगा, उदाहरण के लिए,' this.getResource (...) 'वर्णित के रूप में काम करेगा, लेकिन' SomeClass.class.getResource (...) 'जैसी कुछ नहीं करेगा (यदि मैं सही हूं, तो यह आपके द्वारा वर्णित कार्य करेगा)। – MadProgrammer
'क्लासलोडर' संसाधन पथ हमेशा पूर्ण होते हैं, लेकिन एक अग्रणी '/' ** अमान्य ** है, न केवल ** अनावश्यक **। –
@MadProgrammer आप 'ClassLoader.getResource()' के साथ 'class.getResource()' को भ्रमित कर रहे हैं। उत्तरार्द्ध के पास पैकेज नाम के बारे में जानने का कोई तरीका नहीं है। – EJP