Datein aus laufender Jar lesen und bearbeiten

0plan

Bekanntes Mitglied
Ich habe ein Programm, welches auf mehrere .txt zugreift. Damit der Pfad für jeden Rechner (Benutzername usw) irrelevant für das Lesen der Dateien ist, habe ich diese Dateien mit in die Jardatei gelegt. Sie befinden sich alle in einem Sourceordner "resources". Innerhalb von Eclipse kann ich das Programm fehlerfrei verwenden. Ich greife mit getClass().getResource(/pfad).getFile() auf die Dateien zu und kann sie auch bearbeiten.

Exportiere ich das Programm nun jedoch als Runnable Jar findet er die Dateien nichtmals. Ich habe mir ein kleinen Logger geschrieben welcher z.B. folgende Fehler ausgibt.

file:\C:\Dokumente%20und%20Einstellungen\MEINBENUTZER\Desktop\Chat.jar!\systemdata\gruppen.txt (Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch)

Woran liegt das? In Eclipse findet er die Dateien auch aus dem Resourcen Ordner, Bilder die sich in der Jardatei befinden werden auch in der Runnable Jar angezeigt, nur die .txt Dateien werden nicht gefunden.
 
Nutze anstatt von getResource(/pfad).getFile() getResourceAsStream(/pfad) und bedenke, dass du diese Dateien NICHT ändern, sondern nur lesen kannst.

Für Details kurze Forensuche, das Thema taucht hier gefühlt 3x/Woche auf.
 
Zumindest nicht ohne größeren Aufwand.
Soweit ich weiß ginge nur Folgendes:
  1. Datei temporär woanders speichern
  2. Beim beendenen einen Prozess oder ein anderes JAR starten
  3. Dieser entpackt dein JAR temporär
  4. und packt anschließend alle entpackten Dinge + das temporäre File wieder zum JAR zusammen
 
Unnötige Kommentare sollte man sich sparen, wenn man den Thread als unsinnig sieht 😉

Wenn man jedoch offensichtlich zu faul ist den tip mit der Sufu auch mal zu testen und schon 3 Minuten später doch wieder fragt weils ja einfach viel bequemer ist ... Sorry dann kann ichs mir nicht verkneifen.

Ich übersehe auch mal was in der SuFu aber wenn mir dann jemand sagt guck mal das und das: Dann guck ich auch erst mal und frag nicht 3! Minuten später doch nach ohne nachgeschaut zu haben (Wie gesagt ist ja so schön bequem)
 
Ansich richtig, jedoch gibt es auch Fälle wo die SuFu-Ergebnisse einem nicht weiterhelfen, ich hoffe ja mal das das für 0Plan zutrifft 😉
 
Entschuldigt mein Verhalten die Herren!!! Ich konnte das Thema trotz googlen nicht ösen daher der Thread. Danke für die Tipps soweit.
 
Ansich richtig, jedoch gibt es auch Fälle wo die SuFu-Ergebnisse einem nicht weiterhelfen, ich hoffe ja mal das das für 0Plan zutrifft 😉

Mein Vorredner sagt dazu gibts 3 mal die Woche was im Forum: Nutze die Suchfunktion.

Der TO hat araufhin bereits 3 Minuten später den nächsten Post gestellt in dem er direkt etwas neues fragt.

Ich unterstelle hier tatsächlich, dass er nicht binnen 3 Minuten gemerkt hat das da eine Antwort ist, gesucht hat, die Threads angesehen hat, bemerkt hat mein Problem wird nicht gelöst, und erst dann wieder gefragt hat.

Edit: Wenn man nach "Jar Datei, verändern" sucht im Forum erhält man mitunter sofort folgende Threads:

http://www.java-forum.org/java-basics-anfaenger-themen/56304-einzelne-datei-jar-veraendern.html
http://www.java-forum.org/java-basics-anfaenger-themen/54767-datei-jar-file-erstellen.html
http://www.java-forum.org/allgemeine-java-themen/6980-jar-dateien-schreiben.html
 
Zuletzt bearbeitet von einem Moderator:
Um nochmal zum eigentliche Thema zurückzukommen: die Klasse File bezieht sich nur auf Dateien im Filesystem, wozu Inhalte aus .jars nicht gehören. Dafür gibt es spezialisierte Klassen wie z. B. ZipEntry, mit denen du die Inhalte eines Zip-Archivs durchsuchen kannst. Am einfachsten ist aber immer noch der Zugriff über getResourceAsStream(), wie von mvitz empfohlen.
 

Zurück
Oben