Portanto, você deseja tratar seu .properties
arquivo na mesma pasta que o jar principal / executável como um arquivo, e não como um recurso do jar principal / executável. Nesse caso, minha própria solução é a seguinte:
Primeiro, a arquitetura do arquivo do programa deve ser assim (assumindo que o programa principal seja main.jar e seu arquivo de propriedades principal seja main.properties):
./ - the root of your program
|__ main.jar
|__ main.properties
Com essa arquitetura, você pode modificar qualquer propriedade no arquivo main.properties usando qualquer editor de texto antes ou enquanto o main.jar estiver em execução (dependendo do estado atual do programa), pois é apenas um arquivo baseado em texto. Por exemplo, seu arquivo main.properties pode conter:
app.version=1.0.0.0
app.name=Hello
Portanto, quando você executa o programa principal a partir da pasta raiz / base, normalmente o executa da seguinte maneira:
java -jar ./main.jar
ou imediatamente:
java -jar main.jar
No seu main.jar, você precisa criar alguns métodos utilitários para todas as propriedades encontradas no seu arquivo main.properties; vamos dizer que a app.version
propriedade terá o getAppVersion()
método da seguinte maneira:
/**
* 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;
}
Em qualquer parte do programa principal que precise do app.version
valor, chamamos seu método da seguinte maneira:
String version = null;
try{
version = getAppVersion();
}
catch (IOException ioe){
ioe.printStackTrace();
}
user.home
. Ao verificar o arquivo, verifique primeiro a existência de um arquivo alterado no sistema de arquivos e, se não existir, carregue o arquivo padrão ". BTW "Eu não quero .." O que você quer é menos importante do que aquilo que funciona e é prático. Armazenando aplicativo. as configurações no diretório do aplicativo são fortemente desencorajadas pelo Oracle e pelo MS (e provavelmente por outros).