2012-09-06 12 views

उत्तर

11

जावाडोक से Class.getResourceAsStream() के लिए:

इस विधि इस वस्तु की क्लास लोडर के प्रतिनिधियों।

  • name एक '/' ('\ u002f') के साथ शुरू होता है, तो संसाधन के पूर्ण नाम है: प्रतिनिधिमंडल से पहले, एक पूर्ण संसाधन नाम इस कलन विधि का उपयोग दिए गए संसाधन नाम से निर्माण किया है '/' के बाद नाम का हिस्सा।
  • अन्यथा, पूर्ण नाम निम्न रूप में है: '।' modified_package_name/name
    कहाँ modified_package_name '/' के लिए प्रतिस्थापित के साथ इस वस्तु का पैकेज नाम है ('\ U002e')।

दूसरे शब्दों में, वे एक ही बात करते हैं "पथ" एक "/" के साथ शुरू होता है, लेकिन अगर नहीं, तो फिर उत्तरार्द्ध मामले में, पथ वर्ग के पैकेज के सापेक्ष हो जाएगा, जबकि क्लासलोडर एक पूर्ण होगा।

संक्षेप में, पहले path/to/my/properties और दूसरा fetches package/of/myclass/path/to/my/properties प्राप्त करता है।

2

Class.getClassLoader()documentation से:

वर्ग के लिए वर्ग लोडर देता है। बूटस्ट्रैप क्लास लोडर का प्रतिनिधित्व करने के लिए कुछ कार्यान्वयन शून्य का उपयोग कर सकते हैं। यदि यह वर्ग बूटस्ट्रैप क्लास लोडर द्वारा लोड किया गया था, तो यह विधि इस कार्यान्वयन में शून्य हो जाएगी।

तो getClassLoader()मई वापसी null वर्ग बूटस्ट्रैप वर्ग लोडर, इसलिए Class.getResourceAsStreamimplementation में अशक्त चेक द्वारा लोड किया गया था, तो:

public InputStream getResourceAsStream(String name) { 
    name = resolveName(name); 
    ClassLoader cl = getClassLoader0(); 
    if (cl==null) { 
     // A system class. 
     return ClassLoader.getSystemResourceAsStream(name); 
    } 
    return cl.getResourceAsStream(name); 
} 

तुम भी बयान ध्यान दें जाएगा name = resolveName(name); जो मार्क पीटर्स ने his answer में समझाया है।

1

मुख्य व्यावहारिक अंतर यह है कि जब आप कक्षा के माध्यम से जाते हैं तो आप सापेक्ष पथ का उपयोग कर सकते हैं। इसलिए यदि आपकी गुण MyClass के समान पैकेज में हैं, तो आप

MyClass.class.getResourceAsStream("properties"); 
कर सकते हैं
संबंधित मुद्दे