2008-09-25 7 views
8

मैं उन सभी एक्सएमएल फाइलों को खोजना चाहता हूं जो मेरे क्लासलोडर को वाइल्डकार्ड पैटर्न का उपयोग करने के बारे में पता है। क्या इसे करने का कोई तरीका है?मैं जावा जार में वाइल्डकार्ड नाम के साथ संसाधन कैसे खोज सकता हूं?

उत्तर

5

इसे थोड़ा चालबाजी की आवश्यकता है, लेकिन यहां एक प्रासंगिक blog entry है। आप पहले जार के यूआरएल को समझते हैं, फिर जार खोलें और इसकी सामग्री स्कैन करें। मुझे लगता है कि आप `/META-INF/MANIFEST.MF 'की तलाश करके सभी जारों के यूआरएल खोजेंगे। निर्देशिका एक और मामला होगा।

+0

ऐसा लगता है कि यह काम करेगा, लेकिन मुझे इच्छित फ़ाइल नामों को प्राप्त करने के लिए उचित मात्रा में खोज शामिल होगी। मैं सोच रहा हूं कि फाइल को उस समय में बनाना आसान होगा जिसमें फाइलें हैं जिन्हें मैं देख रहा हूं। इस नई फ़ाइल का एक ज्ञात नाम होगा और क्लासलोडर का उपयोग करके पाया जा सकता है। –

-4

खैर, यह जावा के भीतर से नहीं है, लेकिन

jar -tvf jarname | grep xml$

आप जार में सभी XMLs दिखाएगा।

+2

Unfortuneately में स्निपेट यहीं मैं एक समाधान है कि जावा के भीतर है की जरूरत है। –

1

एक जेएआर फ़ाइल सिर्फ एक और ज़िप फ़ाइल है, है ना?

ZipSearcher searcher = new ZipSearcher(new ZipInputStream(new FileInputStream("my.jar"))); List xmlFilenames = searcher.search(new RegexFilenameFilter(".xml$"));

चीयर्स:

तो मैं आप http://java.sun.com/javase/6/docs/api/java/util/zip/ZipInputStream.html

का उपयोग कर रहा तरह कुछ सोच रहा हूँ जार-फ़ाइलें पुनरावृति सकता है लगता है। कीथ।

7

एक स्प्रिंग ApplicationContext तुच्छता से ऐसा कर सकते हैं:

ApplicationContext context = new ClassPathXmlApplicationContext("applicationConext.xml"); 
Resource[] xmlResources = context.getResources("classpath:/**/*.xml"); 

ResourcePatternResolver#getResources, या ApplicationContext देखें।

+0

हाल ही में वसंत में पैटर्न काम नहीं करेगा। जार के अंदर संसाधनों को खोजने के लिए उपसर्ग को 'classpath *:' होना चाहिए। यह कम से कम एक युद्ध फ़ाइल और एक जेआर पुस्तकालय जिसमें एक्सएमएल फाइलें हैं। – Kayaman

6
List<URL> resources = CPScanner.scanResources(new PackageNameFilter("net.sf.corn.cps.sample"), new ResourceNameFilter("A*.xml")); 

अपने pom.xml

<dependency> 
    <groupId>net.sf.corn</groupId> 
    <artifactId>corn-cps</artifactId> 
    <version>1.0.1</version> 
</dependency> 
+0

यह सबसे आसान समाधानों में से एक प्रतीत होता है। 8-20-2014 के रूप में, नवीनतम संस्करण मेवेन केंद्रीय में 1.1.7 है। –

संबंधित मुद्दे