Alors, vous voulez traiter votre .properties
fichier dans le même dossier que le fichier jar principal / exécutable comme un fichier plutôt que comme une ressource du fichier jar principal / exécutable. Dans ce cas, ma propre solution est la suivante:
Tout d'abord, l'architecture de votre fichier programme doit être comme ceci (en supposant que votre programme principal est main.jar et que son fichier de propriétés principal est main.properties):
./ - the root of your program
|__ main.jar
|__ main.properties
Avec cette architecture, vous pouvez modifier n'importe quelle propriété du fichier main.properties à l'aide de n'importe quel éditeur de texte avant ou pendant l'exécution de votre main.jar (selon l'état actuel du programme) car il ne s'agit que d'un fichier texte. Par exemple, votre fichier main.properties peut contenir:
app.version=1.0.0.0
app.name=Hello
Ainsi, lorsque vous exécutez votre programme principal à partir de son dossier racine / de base, vous l'exécuterez normalement comme ceci:
java -jar ./main.jar
ou, tout de suite:
java -jar main.jar
Dans votre main.jar, vous devez créer quelques méthodes utilitaires pour chaque propriété trouvée dans votre fichier main.properties; disons que la app.version
propriété aura la getAppVersion()
méthode suivante:
/**
* 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;
}
Dans toute partie du programme principal qui a besoin de la app.version
valeur, nous appelons sa méthode comme suit:
String version = null;
try{
version = getAppVersion();
}
catch (IOException ioe){
ioe.printStackTrace();
}
user.home
. Lors de la vérification du fichier, vérifiez d'abord l'existence de un fichier modifié sur le système de fichiers, et s'il n'existe pas, chargez le fichier par défaut. " BTW "Je ne veux pas .." Ce que vous voulez est moins important que ce qui fonctionne et est pratique. Stockage de l'application. Les paramètres dans le répertoire de l'application sont fortement déconseillés par Oracle et MS (et probablement d'autres).