2008-10-09 16 views
17

मान लें कि मेरी कक्षाएं संपीड़ित .war फ़ाइल से लोड की गई हैं या कहीं और लोड की गई हैं, मैं किसी दिए गए पैकेज में सभी संसाधनों को कैसे खोज सकता हूं? फाइलों की गणना करना वास्तव में काम नहीं करेगा, क्योंकि यह एक युद्ध फ़ाइल है। सबसे अधिक संभावना है कि इसमें मौजूदा क्लासलोडर का उपयोग शामिल होगा?क्या मैं किसी दिए गए पैकेज में संसाधनों को सूचीबद्ध कर सकता हूं?

क्या वहां कोई पुस्तकालय है जो ऐसा कुछ करता है? Googling लिस्टिंग फाइलों के साथ केवल कुछ हैक्स पता चला।

उत्तर

5

नहीं, आप पैकेज में संसाधनों को सूचीबद्ध नहीं कर सकते हैं क्योंकि JVM बस यह नहीं जानता कि कौन से संसाधन पैकेज में हैं। this question देखें।

6

स्प्रिंग फ्रेमवर्क PathMatchingResourcePatternResolver नामक एक कक्षा प्रदान करता है। इस वर्ग के साथ आप वाइल्डकार्ड के साथ चींटी स्टाइल पथ दे सकते हैं और यह आपके लिए प्रासंगिक संसाधन पाएगा (क्लासपाथ पर फ़ोल्डरों और जारों के माध्यम से खोजना)।

21

हां। आप ClassLoader.getResources("") का उपयोग कर सकते हैं;

या आप भाल एपीआई का उपयोग कर सकते हैं:
https://www.ohloh.net/p/pureperfect-ferret

यह API आप वर्ग पथ के साथ-साथ मनमाना अभिलेखागार और निर्देशिका आगंतुक पद्धति का उपयोग कर स्कैन करने के लिए अनुमति देता है।

+0

+1 सही समाधान पढ़ा है, किसी भी classloader के लिए और वेब कंटेनर में काम करना चाहिए –

+0

मेरा मानना ​​है कि 'ClassLoader.getResources (" ") वास्तव में जार के लिए काम नहीं करता है। कृपया [इस प्रश्न] पर टिप्पणियां देखें (http://stackoverflow.com/questions/21836950/urlclassloader-getresources-empty-resource-name-not-giving-roots-of-jars)। इसके अलावा स्प्रिंग 'PathMatchingResourcePatternResolver' [उनके दस्तावेज़] में उल्लेख करता है (http://docs.spring.io/spring-framework/docs/2.5.x/api/org/springframework/core/io/support/PathMatchingResourcePatternResolver.html) चाल उन्होंने वास्तव में एक जार से संसाधन खोजने के लिए कार्यान्वित किया (देखें "पोर्टेबिलिटी पर प्रभाव" खंड)। – pazabo

+0

हाँ यह जार के लिए काम करता है। यह किसी भी पर्यावरण के लिए काम करता है। – jcfolsom

3

मैं यह कर: - पैकेजिंग से पहले, ls myResources/*.ext > myResources/list.txt - तो बस फ़ाइल पहले