2012-03-02 12 views
5

Ho un file jar, che contiene varie cartelle come immagini, caratteri, messaggi, ecc ... Devo leggere tutti i file solo nella cartella dei caratteri.Leggi i file da una cartella all'interno di un file jar

Attualmente il mio codice java sta iterando attraverso tutti i contenuti nel file jar. Il mio codice è il seguente:

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()); 
     } 
    } 

C'è un modo tale che posso dare il percorso della cartella dei font (congig-jar \ config \ beni \ fonts), piuttosto che attraversare attraverso tutti i contenuti nel vaso . So che il percorso della cartella dei caratteri è fisso, quindi non voglio che il sovraccarico di travesring attraverso tutte le cartelle nel vaso.

+0

Forse questo pezzo di codice funziona? 'JarEntry entry = getJarEntry (" congig-jar \ config \ assets \ fonts ");' 'Input Input input = jarFile.getInputStream (voce);' –

+1

Chi ha creato (rende) il Jar? Se sei tu, avrebbe senso mettere una lista dei file inclusi in una posizione nota nel Jar. PER ESEMPIO. 'Fonts/all.list'. Ottieni la singola risorsa, leggila e hai l'elenco dei nomi delle voci dei font. –

+0

Andrew- Il file jar non è stato creato da me. È riassunto e inviato, e devo leggere i file dei font nella mia cartella font nel jar – nishMaria

risposta

1

è possibile utilizzare

Class.getResourceAsStream ("/ pkg/resource_name");

questo codice inizierà a cercare risorse dal classpath.

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

+0

Se devo usare Class.getResourceAsStream ("/ pkg/resource_name"), allora ho bisogno di dare il nome esatto del file di font. Il mio problema è che ho diversi file di font nella mia cartella dei font. Quindi ho bisogno di un modo per dare innanzitutto il percorso della cartella all'interno del file jar e quindi di eseguire iterazione dinamica attraverso tutti i file all'interno della cartella dei font e quindi registrarli. – nishMaria

+0

Ho trovato questo post [http://stackoverflow.com/questions/1429172/how-do-i-list-the-files-inside-a-jar-file](http://stackoverflow.com/questions/1429172/how-do-i-list-i-files-dentro-a-jar-file). – ejrav

+0

Il mio requirment è fondamentalmente un bot per scorrere tutti i file/cartelle nel jar, ma solo per scorrere la cartella dei font poiché conosco il pacize in cui risiedono i file dei font. Quindi c'è un modo tale che, do il percorso diretto della cartella dei font nel jar e poi scorrere la cartella dei font e leggere i file dei font uno per uno? – nishMaria

3

È possibile utilizzare un programma di caricamento classi per mettere il vaso su di voi classpath. e quindi tutti i file all'interno del jar sono risorse caricabili.

//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

Ho diversi file nella mia cartella dei font. Quindi ho bisogno di un modo tale che 1) io dia il percorso diretto della cartella all'interno del mio file jar (In questo modo non dovrò prima avviare il jar e poi leggere i contenuti all'interno di uno a uno e vedere se l'estensione del file è. ttd) 2) Iterate dinamicamente la cartella uno per uno e registrateli nell'ambiente grafico – nishMaria

+0

temo che non ci sia modo di farlo usando un ClassLoader. Un buon consiglio è quello che Andrew Thompson suggerisce nel suo commento alla tua domanda: memorizzare un file all'interno del barattolo che elenca tutti i percorsi dei font; quindi leggere il file e scorrere i percorsi memorizzati. – rompetroll

Problemi correlati