J'ai un fichier JAR où tout mon code est archivé pour être exécuté. Je dois accéder à un fichier de propriétés qui doit être changé / édité avant chaque exécution. Je souhaite conserver le fichier de propriétés dans le même répertoire que celui où se trouve le fichier JAR. Est-il possible de dire à Java de récupérer le fichier de propriétés dans ce répertoire?
Remarque: je ne souhaite pas conserver le fichier de propriétés dans le répertoire personnel ou transmettre le chemin du fichier de propriétés en argument de ligne de commande.
java
properties
Neil
la source
la source
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).Réponses:
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):
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:
Ainsi, lorsque vous exécutez votre programme principal à partir de son dossier racine / de base, vous l'exécuterez normalement comme ceci:
ou, tout de suite:
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 lagetAppVersion()
méthode suivante:Dans toute partie du programme principal qui a besoin de la
app.version
valeur, nous appelons sa méthode comme suit:la source
./
dossier racine (même niveau de répertoire) que ce que j'ai décrit dans l'architecture d'organisation des fichiers. (selon les exigences fixées par l'affiche originale)java -jar build/main.jar
, vous devez également placer le fichier de propriétés dans lebuild
dossier afin qu'il soit au même niveau de répertoire que le fichier jar.java -jar path/to/jar/file
. Mais j'ai trouvé la solution dans une autre question:String path = ClassLoader.getSystemClassLoader().getResource(".").getPath() + "/main.properties";
Je l'ai fait autrement.
la source
Il y a toujours un problème pour accéder aux fichiers de votre répertoire de fichiers à partir d'un fichier jar. Fournir le classpath dans un fichier jar est très limité. Essayez plutôt d'utiliser un fichier bat ou un fichier sh pour démarrer votre programme. De cette façon, vous pouvez spécifier votre chemin de classe comme vous le souhaitez, en référençant n'importe quel dossier n'importe où sur le système.
Vérifiez également ma réponse à cette question:
création d'un fichier .exe pour un projet java contenant sqlite
la source
J'ai un cas similaire: vouloir que mon
*.jar
fichier accède à un fichier dans un répertoire à côté dudit*.jar
fichier. Reportez-vous également à CETTE RÉPONSE .Ma structure de fichiers est:
Je suis capable de charger un fichier (par exemple
some.txt
) dans un InputStream à l'intérieur du*.jar
fichier avec les éléments suivants:Alors fais ce que tu veux avec le
stream
la source
J'ai un exemple de faire à la fois par classpath ou à partir d'une configuration externe avec log4j2.properties
la source
Cela fonctionne pour moi. Chargez votre fichier de propriétés depuis
current directory
Assurez-vous que
java.properties
c'est aucurrent directory
. Vous pouvez simplement écrire un petit script de démarrage qui bascule dans le bon répertoire avant, commeDans votre projet, placez simplement le
java.properties
fichier dans la racine de votre projet, afin que ce code fonctionne également à partir de votre IDE.la source
Ici, si vous mentionnez,
.getPath()
cela renverra le chemin de Jar et je suppose que vous aurez besoin de son parent pour faire référence à tous les autres fichiers de configuration placés avec le jar. Ce code fonctionne sous Windows. Ajoutez le code dans la classe principale.la source