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):
./ - the root of your program
|__ main.jar
|__ 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:
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, de inmediato:
java -jar main.jar
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á el 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 necesita el app.version
valor, llamamos a su método de la siguiente manera:
String version = null;
try{
version = getAppVersion();
}
catch (IOException ioe){
ioe.printStackTrace();
}
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.