2012-03-02 16 views
5

के अंदर किसी फ़ोल्डर से फ़ाइलें पढ़ें मेरे पास एक जार फ़ाइल है, जिसमें छवियों, फोंट, संदेश इत्यादि जैसे विभिन्न फ़ोल्डर्स हैं ... मुझे केवल फ़ॉन्ट फ़ोल्डर के अंदर सभी फ़ाइलों को पढ़ना है।एक जार फ़ाइल

वर्तमान में मेरा जावा कोड जार फ़ाइल में सभी सामग्री के माध्यम से पुनरावृत्त कर रहा है। मेरे कोड इस प्रकार है:

private void loadApplicationSpecificFonts() { 
     try{ 
       JarFile jarFile = new JarFile("owenstyle-jar-config.jar"); 
      JarEntry entry; 
       String fontName; 

    for(Enumeration em = jarFile.entries(); em.hasMoreElements();) { 
        String s= em.nextElement().toString(); 
        if(s.endsWith("ttf")){ 
         fontName= s.substring(s.lastIndexOf("/")+1); 
         fontName= fontName.substring(0, fontName.indexOf(".ttf")); 
         entry = jarFile.getJarEntry(s); 
         InputStream input = jarFile.getInputStream(entry); 
         Font font= Font.createFont(Font.TRUETYPE_FONT, input); 
         GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); 
         ge.registerFont(font); 

         input.close(); 
       } 
    } 
      jarFile.close(); 
     }catch (IOException e){ 
      System.err.println("Error: " + e.getMessage()); 
     }catch (FontFormatException e){ 
      System.err.println("Error: " + e.getMessage()); 
     } 
    } 

वहाँ एक रास्ता ऐसा है कि मैं फ़ॉन्ट फ़ोल्डर का पथ दे सकते है (congig-जार \ config \ संपत्ति \ फोंट), बल्कि जार में सभी सामग्री के माध्यम से traversing से । मुझे पता है कि फ़ॉन्ट फ़ोल्डर का मार्ग तय है, इसलिए मैं जार में सभी फ़ोल्डर्स के माध्यम से ट्रैवर्सिंग के ऊपरी हिस्से को नहीं चाहता हूं।

+0

शायद कोड का यह टुकड़ा काम करता है? 'JarEntry प्रविष्टि = getJarEntry ("congig-jar \ config \ assets \ fonts"); ' ' इनपुटस्ट्रीम इनपुट = jarFile.getInputStream (प्रविष्टि);' –

+1

किसने जार बनाया (बनाता है)? यदि यह आप हैं, तो जार में किसी ज्ञात स्थान में शामिल फ़ाइलों की सूची डालना समझदारी होगी। E.G. 'फोंट/all.list'। वह एकल संसाधन प्राप्त करें, इसे पढ़ें, और आपके पास फ़ॉन्ट प्रविष्टि नामों की सूची है। –

+0

एंड्रयू- जार फ़ाइल मेरे द्वारा नहीं बनाई गई है। यह assmebled और भेज दिया है, और मुझे जार – nishMaria

उत्तर

1

आप

Class.getResourceAsStream ("/ pkg/RESOURCE_NAME") का उपयोग कर सकते हैं;

यह कोड कक्षापथ से संसाधनों की खोज शुरू कर देगा।

http://docs.oracle.com/javase/6/docs/api/java/lang/Class.html

+0

यदि मुझे Class.getResourceAsStream ("/ pkg/resource_name") का उपयोग करना है, तो मुझे फ़ॉन्ट फ़ाइल का सही नाम देना होगा। मेरी समस्या यह है कि मेरे पास मेरे फ़ॉन्ट फ़ोल्डर के अंदर कई फ़ॉन्ट फ़ाइलें हैं। इसलिए मुझे पहले जार फ़ाइल के अंदर फ़ोल्डर का पथ देने का एक तरीका चाहिए और फिर फ़ॉन्ट फ़ोल्डर के अंदर सभी फ़ाइलों के माध्यम से गतिशील रूप से पुनरावृत्ति करें और फिर उन्हें पंजीकृत करें। – nishMaria

+0

मुझे यह पोस्ट मिला [http://stackoverflow.com/questions/1429172/how-do-i-list-the-files-inside-a-jar-file ](httpoverflow.com/questions/1429172/कैसे करते हैं-ए-सूची-फ़ाइलें-अंदर-ए-जार-फाइल)। – ejrav

+0

मेरी आवश्यकता मूल रूप से जार में सभी फ़ाइलों/फ़ोल्डरों के माध्यम से फिर से शुरू करने के लिए बॉट है, लेकिन फ़ॉन्ट फ़ोल्डर के माध्यम से फिर से शुरू करने के बाद से मैं पैक्ट को जानता हूं जहां फ़ॉन्ट फ़ाइलें रहते हैं। तो क्या ऐसा कोई तरीका है कि, मैं जार में फ़ॉन्ट फ़ोल्डर का सीधा पथ देता हूं और फिर फ़ॉन्ट फ़ोल्डर के माध्यम से फिर से चलाता हूं और फ़ॉन्ट फ़ाइलों को एक-एक करके पढ़ता हूं? – nishMaria

3

आप पर आप क्लासपाथ जार डाल करने के लिए एक classloader उपयोग कर सकते हैं। और फिर जार के अंदर सभी फाइलें लोड करने योग्य संसाधन हैं।

//ref to some jar 
File f = new File("/tmp/foo.jar"); 

//create a new classloader for this jar 
URLClassLoader loader = URLClassLoader.newInstance(new URL[]{f.toURI().toURL()}); 

//load resource with classloader 
InputStream inputStream = loader.getResourceAsStream("foo/bar/test.txt"); 

//...do stuff with inputStream 
+1

मेरे पास मेरे फ़ॉन्ट फ़ोल्डर के अंदर कई फाइलें हैं I इसलिए मुझे इस तरह की जरूरत है कि 1) मैं अपने जार फ़ाइल के अंदर फ़ोल्डर का सीधा पथ देता हूं (इस तरह मुझे पहले जार में प्रवेश करने की आवश्यकता नहीं होगी और फिर सामग्री को एक-एक करके पढ़ना होगा और देखें कि फ़ाइल एक्सटेंशन क्या है। ttd) 2) फ़ोल्डर को एक-एक करके गतिशील रूप से घुमाएं और उन्हें ग्राफिक्स enviornment – nishMaria

+0

में पंजीकृत करें मुझे डर है कि क्लासलोडर का उपयोग करने का कोई तरीका नहीं है। एक अच्छी सलाह यह है कि एंड्रयू थॉम्पसन आपके प्रश्न पर उनकी टिप्पणी में सुझाव देते हैं: जार के अंदर एक फाइल स्टोर करें जो सभी फ़ॉन्ट पैट सूचीबद्ध करता है; फिर संग्रहित पट्टियों पर फ़ाइल और पुनरावृत्त पढ़ें। – rompetroll

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