Quindi, vuoi trattare il tuo .propertiesfile nella stessa cartella del barattolo principale / eseguibile come un file piuttosto che come una risorsa del barattolo principale / eseguibile. In tal caso, la mia soluzione è la seguente:
Prima cosa: l'architettura del file di programma deve essere così (supponendo che il tuo programma principale sia main.jar e il suo file delle proprietà principale sia main.properties):
./ - the root of your program
|__ main.jar
|__ main.properties
Con questa architettura, è possibile modificare qualsiasi proprietà nel file main.properties utilizzando qualsiasi editor di testo prima o mentre main.jar è in esecuzione (a seconda dello stato corrente del programma) poiché è solo un file di testo. Ad esempio, il file main.properties può contenere:
app.version=1.0.0.0
app.name=Hello
Quindi, quando esegui il tuo programma principale dalla sua cartella root / base, normalmente lo eseguirai così:
java -jar ./main.jar
o, subito:
java -jar main.jar
Nel tuo main.jar, devi creare alcuni metodi di utilità per ogni proprietà trovata nel tuo file main.properties; diciamo che la app.versionproprietà avrà il getAppVersion()metodo come segue:
/**
* 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;
}
In qualsiasi parte del programma principale che necessita del app.versionvalore, chiamiamo il suo metodo come segue:
String version = null;
try{
version = getAppVersion();
}
catch (IOException ioe){
ioe.printStackTrace();
}
user.home. Quando controlli il file, controlla prima l'esistenza di un file modificato sul file system e, se non esiste, caricare il file predefinito. " A proposito "Non voglio .." Quello che vuoi è meno importante di ciò che funziona ed è pratico. App di archiviazione. le impostazioni nella directory dell'applicazione sono fortemente scoraggiate da Oracle e MS (e probabilmente da altri).