Donc, vous voulez traiter votre .properties
dans le même dossier que le jar main/runnable comme un fichier plutôt que comme une ressource du jar main/runnable. Dans ce cas, ma propre solution est la suivante :
Tout d'abord, l'architecture des fichiers de votre programme doit être la suivante (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 en utilisant n'importe quel éditeur de texte avant ou pendant l'exécution de votre main.jar (selon l'état actuel du programme) puisqu'il s'agit simplement 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 Root/base, vous le lancerez 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 méthode app.version
La propriété aura getAppVersion()
comme suit :
/**
* 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 l'option app.version
nous appelons sa méthode comme suit :
String version = null;
try{
version = getAppVersion();
}
catch (IOException ioe){
ioe.printStackTrace();
}
3 votes
Ver cette réponse - "Au lieu de cela, stockez le fichier 'default' dans le Jar. S'il est modifié, stockez le fichier modifié à un autre endroit. Un endroit courant est un sous-répertoire de
user.home
. Lors de la vérification du fichier, il faut d'abord vérifier l'existence d'un fichier modifié sur le système de fichiers, et s'il n'existe pas, charger le fichier par défaut." BTW "Je ne veux pas.." Ce que vous voulez est moins important que ce qui fonctionne et est pratique. Le stockage des paramètres de l'application dans le répertoire de l'application est fortement déconseillé par Oracle et MS (et probablement par d'autres).5 votes
La raison pour laquelle j'ai besoin de conserver le fichier de propriétés dans le répertoire jar est qu'il est préférable de les conserver ensemble lorsque le répertoire entier (y compris jar et property) est copié sur une autre machine et exécuté.
1 votes
Et si j'oblige l'utilisateur à transmettre le chemin d'accès au fichier de propriétés, il doit le modifier chaque fois qu'il exécute le fichier batch à partir d'une autre machine.