2011-11-24 28 views
13

Eventuali duplicati:
How do I read a resource file from a Java jar file?Accesso a un file all'interno di un file .jar

partire per andare completamente bonkers su questo dopo googling per ore. Ho anche visto variazioni della domanda sul sito ma non riesco a farlo funzionare. Un JFrame ha bisogno di leggere i dati da un file ini e ho creato un metodo per aprire detto file. Tale file è archiviato in una cartella denominata risorse all'interno di un file jar.

private BufferedReader openIniFile(String filename){ 
    BufferedReader brReader = null;     
    try{ 
     File fileObj = new File(this.getClass().getResource("/resources/" + filename).toURI()); // The fileobject of the file to read 
     if(fileObj.exists())            
      brReader = new BufferedReader(new FileReader(fileObj));      

    } catch(Exception e){ 
     System.err.println("Exception while opening file: " + e.getMessage()); 

    } 

    return null; 
} 

Questo naturalmente funziona perfettamente quando sono in esecuzione il codice dopo la compilazione, ma genera un'eccezione dopo essere stati esportati in un file .jar. Ho esaminato l'uso di InputStream, FileInputStream ma non riesco a trovare una soluzione che funzioni.

Come posso rendere il file jar riconoscere la risorsa?

+0

ho provato, non poteva farlo funzionare :( – Chrizmo

+0

"non poteva farlo funzionare" non aiuta molto –

+0

Mi dispiace. Ottiene ancora un'eccezione null. – Chrizmo

risposta

19

Quando la tua presentazione è in file JAR, non è più un file. Un file è solo un file fisico sul filesystem. Soluzione: utilizzare getResourceAsStream. Qualcosa del genere:

new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/resources/" + filename))) 
+0

Ma se uso getResourceAsStream non riesco a usare la classe File giusto? – Chrizmo

+1

Esatto. un file. –

+1

Ho una directory all'interno delle risorse che contiene tutti i file. Come faccio a navigare nella directory per accedere a tutti i file e quindi utilizzare sopra? – Ava

4

Stai leggendo il file sbagliato. Se il file si trova in un JAR, non è possibile utilizzare la classe File. Invece, è necessario ottenere un InputStream al file utilizzando getResourceAsStream():

InputStream in = this.getClass().getResourceAsStream("/resources/" + filename);