2011-11-24 25 views
13

Duplicar posible:
How do I read a resource file from a Java jar file?Acceso a un archivo dentro de un archivo .jar

empezando a ir completamente loco sobre este tras Google durante horas. También he visto variaciones de la pregunta en el sitio, pero parece que no funciona. Un JFrame necesita leer datos de un archivo ini y he creado un método para abrir dicho archivo. Dicho archivo se almacena en una carpeta llamada recursos dentro de un archivo 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; 
} 

Por supuesto, esto funciona perfectamente cuando estoy corriendo el código después de la compilación, pero se produce una excepción después de haber sido exportado a un archivo .jar. He investigado el uso de InputStream, FileInputStream pero parece que no puedo encontrar una solución que funcione.

¿Cómo puedo hacer que el archivo jar reconozca el recurso?

+0

lo he intentado, no podía conseguir que funcione :( – Chrizmo

+0

"no podía conseguir que funcione" no ayuda mucho –

+0

Lo siento. Aún arroja una excepción nula. – Chrizmo

Respuesta

19

Cuando su recurso está en el archivo JAR, ya no es un archivo. Un archivo es solo un archivo físico en el sistema de archivos. Solución: use getResourceAsStream. Algo como esto:

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

Pero si utilizo getResourceAsStream no puedo usar la clase File right? – Chrizmo

+1

Correcto. No es un archivo. –

+1

Tengo un directorio dentro de los recursos que tiene todos los archivos. ¿Cómo navego por el directorio para acceder a todos los archivos y luego uso la información anterior? – Ava

4

Está leyendo el archivo equivocado. Si el archivo está ubicado en un JAR, no puede usar la clase File. En su lugar, usted debe obtener una InputStream al archivo usando getResourceAsStream():

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