IO in Jar-Archiven

Warrior7777

Bekanntes Mitglied
Hallo miteinander

ich weiss, dass es schon mehrere Threads gibt, die sich mit Input in Jars befassen. Wie ich das verstehe, muss man dort eine Methode getResourceAsStream() benutzen. Ich hab aber nichts über das schreiben von Dateien innerhalb einer JAR-Datei gelesen. Geht das überhaupt oder muss die Datei in einem "normalen" Verzeichnis gespeichert werden?
(Hinweis: Ich habe das mit einem sehr kleinen Telefonbuch-Programm getestet.)

Danke für die Antworten! :)

P. S. : Sollte dieser Ort am falschen Ort sein: sagt es bitte.
 
M

maki

Gast
Das geht nicht.

Eine Jar ist ein Zip Archiv, da gibt es keine Dateien, sondern Entries.
Jedesmal wenn man ein Zip/Jar ändern will, muss alles komplett neu gepackt werden und es entsteht eine neue Zip/Jar Datei.
 

Warrior7777

Bekanntes Mitglied
Danke für die schnelle Antwort! :)
Gibt es eine Möglichkeit, den Pfad des JAR-Archivs herauszufinden? Dann könnte ich meine Adressen etc. wenigstens im selben Verzeichnis speichern... Dann brauch ich auch getResourceAsStream nicht mehr. ;)
 
M

maki

Gast
Java:
new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath())
Das SOllte dir das Verzeichnis liefern, musst halt noch den eigentliche Dateinamen ranhängen, wenn ich mich richtig erinnere ;)
 

faetzminator

Gesperrter Benutzer
Es gibt sogar noch ein grösseres Problem. Viele denken sich, sie speichern die Einstellungen im aktuell laufenden Jar. Das geht natürlich überhaupt nicht. D.h. Schreibzugriff auf fremdes Jar: kein Problem. Auf eigenes: nö!
 
G

Gast2

Gast
System.getProperty("user.dir") gibt aber das Verzeichnis zurück aus dem das Programm gestartet wurde, das muss nicht zwangsläufig aus das Verzeichnis sein in dem das jar file liegt.

Ich würde die Daten deines Programms im Verzeichnis <user.home>/.deineAnwendung speichern. Da liegen die mMn nach ganz gut.
 
M

maki

Gast
Java:
new File(System.getProperty("user.dir"))
ist gleichwertig zu
Java:
new File(".")
liefert beides das sog. working directory und wie EikeB sagt, muss das nicht das Verzeichnis sein wo die Jar liegt.
 

Warrior7777

Bekanntes Mitglied
Vielen Dank für Eure Antworten! :)
Eine Frage habe ich aber trotzdem noch: Wenn das Jar-Archiv per Doppelklick gestartet wurde (was die meisten nicht-programmierenden Anwender ja machen ;)), ist dann dieses Working-Directory das Verzeichnis, in dem das JAR liegt?
 
W

Worker

Gast
wie wäre es mit:
Java:
new File("user.dir")
? ;)

mfg
BH16

Mal davon abgesehen das [c]new File("user.dir");[/c] sowohl auf ein Verzeichnis "./user.dir/" zeigen könnte als auch auf eine Datei "./user.dir" und um das was du erreichen willst eh [c]System.getProperty(String)[/c] verwenden musst ist die Variante
Java:
File me=new File(this.getClass().getProtectionDomain().getCodeSource().getLocation().toURI());
deutlich besser geeignet um den aktuellen Pfad zur aktuellen JAR zu finden.


@ALL

Ihr wisst aber schon das CodeSource.getLocation() nur eine URL liefert, aber es keinen File(URL) Konstruktor gibt , oder ?
Von daher ist es besser wenn man URL.toURI() callt um den Konstruktor File(URI) dierekt nutzen zu können.
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben