Ich habe eine JAR-Datei, in der mein gesamter Code zum Ausführen archiviert wird. Ich muss auf eine Eigenschaftendatei zugreifen, die vor jedem Lauf geändert / bearbeitet werden muss. Ich möchte die Eigenschaftendatei in demselben Verzeichnis behalten, in dem sich die JAR-Datei befindet. Gibt es eine Möglichkeit, Java anzuweisen, die Eigenschaftendatei aus diesem Verzeichnis abzurufen?
Hinweis: Ich möchte die Eigenschaftendatei nicht im Ausgangsverzeichnis behalten oder den Pfad der Eigenschaftendatei im Befehlszeilenargument übergeben.
java
properties
Neil
quelle
quelle
user.home
. Wenn Sie nach der Datei suchen, überprüfen Sie zuerst die Existenz von eine geänderte Datei im Dateisystem, und wenn sie nicht vorhanden ist, laden Sie die Standarddatei. " Übrigens "Ich will nicht ..." Was Sie wollen, ist weniger wichtig als das, was funktioniert und praktisch ist. App speichern. Von den Einstellungen im Anwendungsverzeichnis wird sowohl von Oracle als auch von MS (und wahrscheinlich auch von anderen) dringend abgeraten.Antworten:
Sie möchten Ihre
.properties
Datei also im selben Ordner wie das Haupt- / ausführbare JAR als Datei und nicht als Ressource des Haupt- / ausführbaren JARs behandeln. In diesem Fall lautet meine eigene Lösung wie folgt:Das erste zuerst: Ihre Programmdatei-Architektur muss so aussehen (vorausgesetzt, Ihr Hauptprogramm ist main.jar und seine Haupteigenschaftendatei ist main.properties):
Mit dieser Architektur können Sie jede Eigenschaft in der Datei main.properties mit einem beliebigen Texteditor ändern, bevor oder während Ihre main.jar ausgeführt wird (abhängig vom aktuellen Status des Programms), da es sich nur um eine textbasierte Datei handelt. Beispielsweise kann Ihre Datei main.properties Folgendes enthalten:
Wenn Sie also Ihr Hauptprogramm aus dem Stamm- / Basisordner ausführen, führen Sie es normalerweise folgendermaßen aus:
oder sofort:
In Ihrer Datei main.jar müssen Sie für jede Eigenschaft in Ihrer Datei main.properties einige Dienstprogrammmethoden erstellen. sagen wir das
app.version
Eigenschaft hat folgendegetAppVersion()
Methode:In jedem Teil des Hauptprogramms, der den
app.version
Wert benötigt, rufen wir seine Methode wie folgt auf:quelle
./
Stammordner (auf derselben Verzeichnisebene) befinden müssen, wie ich es in der Architektur der Dateiorganisation beschrieben habe. (gemäß den Anforderungen des Originalplakats)java -jar build/main.jar
müssen Sie die Eigenschaftendatei ebenfalls in einembuild
Ordner ablegen, damit sie sich auf derselben Verzeichnisebene wie das JAR befindet.java -jar path/to/jar/file
. Aber ich fand die Lösung in einer anderen Frage:String path = ClassLoader.getSystemClassLoader().getResource(".").getPath() + "/main.properties";
Ich habe es anders gemacht.
quelle
Es gibt immer ein Problem beim Zugriff auf Dateien in Ihrem Dateiverzeichnis aus einer JAR-Datei. Das Bereitstellen des Klassenpfads in einer JAR-Datei ist sehr begrenzt. Versuchen Sie stattdessen, eine Bat-Datei oder eine Sh-Datei zu verwenden, um Ihr Programm zu starten. Auf diese Weise können Sie Ihren Klassenpfad beliebig angeben und auf einen beliebigen Ordner im gesamten System verweisen.
Überprüfen Sie auch meine Antwort auf diese Frage:
Erstellen einer EXE-Datei für ein Java-Projekt, das SQLite enthält
quelle
Ich habe einen ähnlichen Fall: Ich möchte, dass meine
*.jar
Datei auf eine Datei in einem Verzeichnis neben dieser*.jar
Datei zugreift. Siehe DIESE ANTWORT .Meine Dateistruktur ist:
Ich kann eine Datei (z. B.
some.txt
) in einen InputStream in der*.jar
Datei wie folgt laden :Dann mach was du willst mit dem
stream
quelle
Ich habe ein Beispiel dafür, wie man sowohl mit dem Klassenpfad als auch mit der externen Konfiguration mit log4j2.properties arbeitet
quelle
Das funktioniert bei mir. Laden Sie Ihre Eigenschaftendatei von
current directory
Stellen Sie sicher, das
java.properties
ist amcurrent directory
. Sie können einfach ein kleines Startskript schreiben, das zuvor in das richtige Verzeichnis wechseltjava.properties
Fügen Sie in Ihrem Projekt die Datei einfach in Ihr Projektstammverzeichnis ein, damit dieser Code auch in Ihrer IDE funktioniert.quelle
Wenn Sie hier erwähnen
.getPath()
, wird der Pfad von Jar zurückgegeben, und ich denke, Sie benötigen das übergeordnete Element, um auf alle anderen Konfigurationsdateien zu verweisen, die im Jar abgelegt sind. Dieser Code funktioniert unter Windows. Fügen Sie den Code innerhalb der Hauptklasse hinzu.quelle