मुझे आश्चर्य है कि क्या अंतर है Class.getResource()
और ClassLoader.getResource()
?
संपादित करें: मैं विशेष रूप से जानना चाहता हूं कि क्या कोई कैशिंग फ़ाइल / निर्देशिका स्तर पर शामिल है। के रूप में "निर्देशिका लिस्टिंग वर्ग संस्करण में कैश्ड हैं?"
AFAIK निम्नलिखित अनिवार्य रूप से एक ही करना चाहिए, लेकिन वे नहीं हैं:
getClass().getResource()
getClass().getClassLoader().getResource()
मुझे यह पता चला जब कुछ रिपोर्ट जनरेशन कोड के साथ फ़िडलिंग WEB-INF/classes/
जो उस निर्देशिका में एक मौजूदा फ़ाइल से एक नई फ़ाइल बनाता है । कक्षा से विधि का उपयोग करते समय, मैं उन फ़ाइलों को खोज सकता था जो तैनाती का उपयोग कर रहे थे getClass().getResource()
, लेकिन जब नई बनाई गई फ़ाइल लाने की कोशिश कर रहे थे, तो मैंने एक अशक्त वस्तु प्राप्त की। निर्देशिका को ब्राउज़ करने से स्पष्ट रूप से पता चलता है कि नई फ़ाइल वहां मौजूद है। फ़ाइल नाम "/myFile.txt" के रूप में फ़ॉरवर्ड स्लैश से बनाए गए थे।
ClassLoader
के संस्करण getResource()
दूसरी ओर उत्पन्न फ़ाइल मिला। इस अनुभव से ऐसा लगता है कि निर्देशिका लिस्टिंग के कुछ प्रकार की कैशिंग चल रही है। क्या मैं सही हूं, और यदि हां, तो यह दस्तावेज कहां है?
से एपीआई डॉक्स परClass.getResource()
किसी दिए गए नाम के साथ एक संसाधन ढूँढता है। किसी दिए गए वर्ग से जुड़े संसाधनों की खोज करने के नियम कक्षा के डिफाइनिंग क्लास लोडर द्वारा लागू किए जाते हैं। यह विधि इस ऑब्जेक्ट के क्लास लोडर को दर्शाती है। यदि यह ऑब्जेक्ट बूटस्ट्रैप क्लास लोडर द्वारा लोड किया गया था, तो विधि ClassLoader.getSystemResource (java.lang.String) को सौंपती है।
मेरे लिए, यह पढ़ता है "Class.getResource वास्तव में अपने स्वयं के क्लास लोडर को getResource ()" कह रहा है। जो करने जैसा ही होगा getClass().getClassLoader().getResource()
। लेकिन यह स्पष्ट रूप से नहीं है। क्या कोई मुझे इस मामले में कुछ रोशनी प्रदान कर सकता है?