Tengo un archivo JAR donde se archiva todo mi código para su ejecución. Tengo que acceder a un archivo de propiedades que debe modificarse / editarse antes de cada ejecución. Quiero mantener el archivo de propiedades en el mismo directorio donde está el archivo JAR. ¿Hay alguna forma de decirle a Java que recoja el archivo de propiedades de ese directorio?
Nota: No quiero mantener el archivo de propiedades en el directorio de inicio ni pasar la ruta del archivo de propiedades en el argumento de la línea de comandos.
java
properties
Neil
fuente
fuente
user.home
. Al verificar el archivo, primero verifique la existencia de un archivo alterado en el sistema de archivos y, si no existe, cargue el archivo predeterminado ". Por cierto "no quiero ..." Lo que quieres es menos importante que lo que funciona y es práctico. Aplicación de almacenamiento Oracle y MS (y probablemente otros) desaconsejan la configuración en el directorio de la aplicación.Respuestas:
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:Primero lo primero: la arquitectura del archivo de programa será así (suponiendo que su programa principal sea main.jar y su archivo de propiedades principal sea main.properties):
Con esta arquitectura, puede modificar cualquier propiedad en el archivo main.properties utilizando cualquier editor de texto antes o mientras se ejecuta su main.jar (dependiendo del estado actual del programa) ya que es solo un archivo basado en texto. Por ejemplo, su archivo main.properties puede contener:
Entonces, cuando ejecuta su programa principal desde su carpeta raíz / base, normalmente lo ejecutará así:
o, de inmediato:
En su main.jar, debe crear algunos métodos de utilidad para cada propiedad que se encuentre en su archivo main.properties; Digamos que la
app.version
propiedad tendrá elgetAppVersion()
método de la siguiente manera:En cualquier parte del programa principal que necesita el
app.version
valor, llamamos a su método de la siguiente manera:fuente
./
carpeta raíz (mismo nivel de directorio) que lo que he descrito en la arquitectura de la organización de archivos. (según el requisito establecido por el póster original)java -jar build/main.jar
, también debe colocar el archivo de propiedades en labuild
carpeta para que esté en el mismo nivel de directorio que el jar.java -jar path/to/jar/file
. Pero encontré la solución en otra pregunta:String path = ClassLoader.getSystemClassLoader().getResource(".").getPath() + "/main.properties";
Lo hice de otra manera.
fuente
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.
Comprueba también mi respuesta a esta pregunta:
haciendo un archivo .exe para un proyecto java que contiene sqlite
fuente
Tengo un caso similar: querer que mi
*.jar
archivo acceda a un archivo en un directorio al lado de dicho*.jar
archivo. Consulte esta RESPUESTA también.Mi estructura de archivos es:
Puedo cargar un archivo (digamos
some.txt
) en un InputStream dentro del*.jar
archivo con lo siguiente:Luego haz lo que quieras con el
stream
fuente
Tengo un ejemplo de hacer ambos por classpath o desde una configuración externa con log4j2.properties
fuente
Esto funciona para mi. Cargue su archivo de propiedades desde
current directory
Asegúrate de que
java.properties
esté en elcurrent directory
. Simplemente puede escribir un pequeño script de inicio que cambie al directorio correcto antes, comoEn su proyecto, simplemente coloque el
java.properties
archivo en la raíz del proyecto, para que este código también funcione desde su IDE.fuente
Aquí, si lo menciona
.getPath()
, devolverá la ruta de Jar y supongo que necesitará que su padre haga referencia a todos los demás archivos de configuración colocados con el jar. Este código funciona en Windows. Agregue el código dentro de la clase principal.fuente