Cargar ficheros contenidos en un .jar

Para cargar ficheros contenidos en el .jar hay que utilizar el método Class.getResourceAsStream(String nombre). Este método devuelve un InputStream de manera que puedes leer los bytes con un InputStreamReader, un BufferedReader, o cargar un Properties.

Para obtener la clase simplemente hay que utilizar el método getClass() que posee todo objeto por heredar de Object.

El nombre del recurso puede contener una ruta. Si la dirección es relativa, se toma a partir del paquete actual (pero la ruta con ‘/’ en vez de ‘.’). Si la dirección es absoluta, se busca en el classpath y por lo tanto también en el propio jar.

 

Carga básica

package com.nishilua.mischorradas ;
InputStream inRelativo = getClass().getResourceAsStream("archivos/archivo.txt") ;
InputStream inAbsoluto = getClass().getResourceAsStream("/archivos/archivo.txt") ;

En el primer caso (línea 3) inRelativo, se carga del directorio del jar (o del classpath): /com/nishilua/mischorradas/archivos/archivo.txt

En el segundo caso (línea 4) inAbsoluto, se carga del directorio contenido en el jar (o classpath): /archivos/archivo.txt

 

Lectura con BufferedReader

Para leer archivos de texto tal vez prefiramos leer  línea por línea, por lo que es útil la clase BufferedReader:

BufferedReader in = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/archivos/archivo.txt"))) ;

Para cargar un recurso desde la raíz del classpath (en vez desde el packete al que pertenece la clase obtenida mediante getClass()), se ha de utilizar:

getClassLoader().getResourceAsStream() ;

Más información en los siguientes enlaces:

 

Lectura de un fichero .properties

Por último, la lectura de un fichero properties mediante el método load():

Properties opciones = new Properties() ;
opciones.load(getClass().getResourceAsStream("/archivos/archivo.properties")) ;