Saltar al contenido

Leer archivo de propiedades fuera del archivo JAR

Te traemos el resultado a esta impedimento, al menos eso deseamos. Si continuas con preguntas puedes escribirlo en el apartado de comentarios y sin dudarlo te ayudaremos

Solución:

Por lo tanto, desea tratar su .properties archivo en la misma carpeta que el jar principal/ejecutable como un archivo en lugar de como un recurso del jar principal/ejecutable. En ese caso, mi propia solución es la siguiente:

Lo primero es lo primero: la arquitectura de archivos de su programa será así (suponiendo que su programa principal sea main.jar y su archivo de propiedades principal sea main.properties):

./ - the root of your program
 |__ main.jar
 |__ main.properties

Con esta arquitectura, puede modificar cualquier propiedad en el archivo main.properties usando cualquier editor de texto antes o mientras se ejecuta su main.jar (según el estado actual del programa), ya que es solo un archivo basado en texto. Por ejemplo, su archivo main.properties puede contener:

app.version=1.0.0.0
app.name=Hello

Entonces, cuando ejecuta su programa principal desde su carpeta raíz/base, normalmente lo ejecutará así:

java -jar ./main.jar

o, directamente:

java -jar main.jar

En su main.jar, debe crear algunos métodos de utilidad para cada propiedad que se encuentra en su archivo main.properties; digamos el app.version la propiedad tendrá getAppVersion() método de la siguiente manera:

/**
 * Gets the app.version property value from
 * the ./main.properties file of the base folder
 *
 * @return app.version string
 * @throws IOException
 */

import java.util.Properties;

public static String getAppVersion() throws IOException

    String versionString = null;

    //to load application's properties, we use this class
    Properties mainProperties = new Properties();

    FileInputStream file;

    //the base folder is ./, the root of the main.properties file  
    String path = "./main.properties";

    //load the file handle for main.properties
    file = new FileInputStream(path);

    //load all the properties from this file
    mainProperties.load(file);

    //we have loaded the properties, so close the file handle
    file.close();

    //retrieve the property we are intrested, the app.version
    versionString = mainProperties.getProperty("app.version");

    return versionString;

En cualquier parte del programa principal que necesite la app.version valor, llamamos a su método de la siguiente manera:

String version = null;
try
     version = getAppVersion();

catch (IOException ioe)
    ioe.printStackTrace();

Lo hice de otra manera.

Properties prop = new Properties();
    try 

        File jarPath=new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());
        String propertiesPath=jarPath.getParentFile().getAbsolutePath();
        System.out.println(" propertiesPath-"+propertiesPath);
        prop.load(new FileInputStream(propertiesPath+"/importer.properties"));
     catch (IOException e1) 
        e1.printStackTrace();
    
  1. Obtenga la ruta del archivo Jar.
  2. Obtenga la carpeta principal de ese archivo.
  3. Use esa ruta en InputStreamPath con su nombre de archivo de propiedades.

Siempre hay un problema para acceder a los archivos en su directorio de archivos desde un archivo jar. Proporcionar el classpath en un archivo jar es muy limitado. En su lugar, intente usar un archivo bat o un archivo sh para iniciar su programa. De esa manera, puede especificar su classpath de la forma que desee, haciendo referencia a cualquier carpeta en cualquier parte del sistema.

También verifique mi respuesta a esta pregunta:

haciendo un archivo .exe para un proyecto java que contiene sqlite

Si haces scroll puedes encontrar las críticas de otros usuarios, tú asimismo puedes mostrar el tuyo si dominas el tema.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *