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")) ;

 

3 thoughts on “Cargar ficheros contenidos en un .jar

  1. Para la lectura específica de un fichero properties yo lo hago de la siguiente manera:

    ResourceBundle rb = ResourceBundle.getBundle(“conexionbbdd”);
    username = rb.getString(“user”);
    url = rb.getString(“url”);

    Que es una clase del paquete java.util. :)

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.