Ordner im Archiv (jar) auslesen

jonius

Aktives Mitglied
Ich habe ein Jar-Archiv, aus dem das Programm gestartet wird. Was ich suche, ist eine Möglichkeit, zur Laufzeit einen Ordner im Archiv nach Dateien zu durchsuchen. Also per Quelltext mir alle Dateien in einem Ordner innerhalb des Archivs auflisten zu lassen. So wie es mit new File("xyz").list() in einem normalen Ordner möglich ist.
 

Antoras

Top Contributor
Dafür gibt es die Klasse
Code:
java.util.jar.JarFile
:
Java:
String jarName() {
  final String s[] = this.getClass.getProtectionDomain().getCodeSource().getLocation().toString().split("/");
  return s[s.length - 1];
}

// Zugriff auf das Archiv
new JarFile(jarName()).entries();

// Iteration über die Dateien im Archiv
for (final JarEntry e : Collections.list(new JarFile(jarName()).entries())) {
  ...
}
 

jonius

Aktives Mitglied
Jetzt habe ich es endlich einmal ausprobiert, allerdings funktioniert es bei mir nicht. Abgesehen davon, dass du bei getClass die Klammern vergessen hast, liefert bei mir die Methode jarName() den String "rsrc:."
Das Programm befindet sich in einem ausführbaren Jar-Archiv. Hast du eine Idee, woran das liegt?
 

Antoras

Top Contributor
Hm, was gibt denn
Code:
this.getClass.getProtectionDomain().getCodeSource().getLocation()
aus?

Das sollte eigentlich die Form
Code:
file:/path/to/program.jar
haben.
 

jonius

Aktives Mitglied
Da bekommt ich "rsrc:./". Ich habe es sowohl unter Linux, als auch unter Windows ausprobiert. Ich hatte in Erinnerung das früher auch schon so in etwa gemacht zu haben, aber irgendwie klappt es nicht. Ich schaffe es nicht, mir den Pfad zur Jar, bzw. einfach den Namen während der Laufzeit zu ermitteln.
 

Antoras

Top Contributor
Von dem Fehler hab ich noch nie was gehört. Bist du sicher, dass das JAR nicht kaputt ist? Wie erstellst du das Archiv?
 

jonius

Aktives Mitglied
Ich habe das Archiv mit Eclipse erstellt. Aber ich habe es auch mit Nautilus mal erstellt (Linux) mit gleichem Ergebnis. Ich habe es sowohl unter Linux mit dem Sun-Java, als auch unter Windows 7 mit aktuellem JRE ausgeführt. Mit jeweils dem gleichen Ergebnis.
Ich habe mal das Archiv angehangen. Die erste Ausgabe vor dem Fehler ist das Ergebnis von
Java:
this.getClass.getProtectionDomain().getCodeSource().getLocation()
 

Anhänge

  • Bomberclown2.jar
    167,9 KB · Aufrufe: 7

Antoras

Top Contributor
Deine Manifest-Datei sieht momentan so aus:
Code:
Manifest-Version: 1.0
Rsrc-Class-Path: ./ mp3plugin.jar
Class-Path: .
Rsrc-Main-Class: fenster.Hauptmenue
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
Die Klasse JarRsrcLoader ist wohl der Grund warum dein JAR nicht funktioniert.
Wahrscheinlich hast du bei Eclipse anstatt
Code:
Extract required libs
die Alternative
Code:
Package required libs
ausgewählt, weshalb Eclipse einen eigenen JarLoader einbaut. Wieso das zu Problemen führt weiß ich nicht, aber ändere das mal. Funktioniert es dann?
Wenn das auch nicht funktioniert, dann kann ich dir das Fat-JAR-Plugin empfehlen, das komfortabler und einfacher zu bedienen ist als der bei Eclipse eingebaute JAR-Exporter.
 

jonius

Aktives Mitglied
Du hast Recht. Ich verstehe den Unterschied zwar nicht wirklich, aber mit "Extract required libs" funktioniert es jetzt. Kannst du mir den Unterschied erklären? Ansonsten ist das Problem damit ja geklärt! Danke!

Korrektur: Der einzige Schönheitsfehler liegt darin, dass es unter Linux so nicht funktioniert, weil das ausführende Verzeichnis hier immer das home-Verzeichnis ist. Aber wenn man den Pfad, den man erhält nicht splittet, sondern das "file:" entfernt und Leerzeichen korrigiert, geht es.
 
Zuletzt bearbeitet:

Antoras

Top Contributor
Mit extract wird der Inhalt einer JAR entpackt und zusammen mit den anderen Dateien in einem neuen JAR wieder gepackt.
Mit package wird ein JAR direkt in ein anderes JAR gepackt also ohne es vorher zu entpacken. Bei dieser Methode kann der Code in der inneren JAR nicht ausgeführt werden, da der Pfad sich unterscheidet:
Code:
extract:
app.jar/path/to/MainClass
app.jar/com/lib/AnyClass

package:
app.jar/path/to/MainClass
app.jar/lib.jar/com/lib/AnyClass
Wenn MainClass auf AnyClass verweist (mit com.lib.AnyClass), dann kann die JVM in letzterem Fall die Klasse nicht finden, da sie in einem anderen Package liegt. Deshalb wird ein spezieller ClassLoader benötigt, der die benötigten Packages referenziert, damit sie gefunden werden können.

Dein kleiner Schönheitsfehler tritt bei mir nicht auf, ich bekomme immer den absoluten Pfad geliefert, der immer einen Slash beinhaltet.
 

jonius

Aktives Mitglied
Noch eine Frage, die indirekt damit zu tun hat:
Kann ich in das bestehende Archiv, in dem das Programm liegt, mit dem Programm eine Datei hinzufügen bzw. ersetzen?
 

Antoras

Top Contributor
Nicht ohne es zu entpacken, die Änderungen vorzunehmen und es wieder neu zu packen. Ein JAR ist bloß ein ZIP mit anderer Endung.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
_user_q Verknüpfung einer .jar-Datei (liegt z. B. auf dem Desktop) im Autostart-Ordner erstellen? Allgemeine Java-Themen 20
Tobero .jar Dateine aus einem Ordner laden (Java 16) Allgemeine Java-Themen 5
G Datei aus Ordner wählen, ohne den Dateinamen im Pfad angeben zu müssen Allgemeine Java-Themen 4
Zrebna FileUtils.cleanDirectory() - aber einen sub-Ordner "verschonen" Allgemeine Java-Themen 1
M Ordner kopieren Allgemeine Java-Themen 5
B Datei/Ordner auf Server zugreifen/erstellen Allgemeine Java-Themen 2
I Klassen aus Jar-Dateien aus anderem Ordner laden Allgemeine Java-Themen 3
B Dateien / Bilder von "webapp" Ordner bekommen? Allgemeine Java-Themen 1
F Registry Ordner durchlaufen Allgemeine Java-Themen 1
Drachenbauer Wie sorge ich dafür, dass mein Spiel die ini-Datei in der Resourcen-ordner des Projektes schreibt? Allgemeine Java-Themen 5
L File beim Kopieren in einen anderen Ordner umbenennen Allgemeine Java-Themen 6
M Key-File im selben Ordner speichern? Allgemeine Java-Themen 18
R Setting Ordner fehlt Allgemeine Java-Themen 1
J Ordner und Datei Struktur einer War Datei Allgemeine Java-Themen 1
K getResource guckt im Target-Ordner...? Allgemeine Java-Themen 2
P Zum src Ordner einen Projektes navigieren Allgemeine Java-Themen 8
D Ordner commiten mit SvnKit Allgemeine Java-Themen 0
U javax.mail.Folder.list() zeigt nicht alle Ordner Allgemeine Java-Themen 5
D Kopieren von Dateien aus einem Ordner in einen anderen Allgemeine Java-Themen 6
I nach Image Load in ListView, kann Ordner nicht mehr gelöscht werden Allgemeine Java-Themen 1
P JDK installieren Kann man die Ordner in C:\Users\*\AppData\LocalLow\Sun\Java\.... löschen? Allgemeine Java-Themen 3
X Dateien von der Jar zum Ordner kopieren. Allgemeine Java-Themen 4
Ananaskirsche Input/Output Dateien im Ordner Allgemeine Java-Themen 8
A Input/Output Liste der Dateien in einem Ordner in einer Jar Datei erhalten Allgemeine Java-Themen 11
D Ordner auf Desktop erstellen(Pc unabhängig) Allgemeine Java-Themen 5
K NetBeans Ordner bei 'Clean&Build' automatisch in dist Verzeichnis kopieren Allgemeine Java-Themen 0
T Ordner samt Dateien kopieren Allgemeine Java-Themen 11
T Datei Ordner in Binär-Zahlenkette umwandeln Allgemeine Java-Themen 11
M JavaMail Spam-Ordner Allgemeine Java-Themen 2
B Dateien verschwinden aus bin Ordner?! Allgemeine Java-Themen 5
Minonos Einem Programm Zugriff auf bestimmte Ordner geben Allgemeine Java-Themen 5
M Pakete in Ordner Kopieren Allgemeine Java-Themen 7
P Ordner und Unterordner rückwärts durchsuchen Allgemeine Java-Themen 3
B Swing In JAR Ordner durchsuchen Allgemeine Java-Themen 2
B Ordner öffnen mittels Java in Linux-Umgebung Allgemeine Java-Themen 7
H Ordner in Zip integrieren Allgemeine Java-Themen 7
P Input/Output Ordner löschen --> geht nicht Datei --> Ja Allgemeine Java-Themen 6
I Java Ordner kopieren [Error] Allgemeine Java-Themen 6
S Dateien aus src-Ordner lesen Allgemeine Java-Themen 3
E nach dem Ordner suchen, wo .jar datei sich befindet Allgemeine Java-Themen 17
Developer_X Java FTP - Ordner auf Server erstellen Allgemeine Java-Themen 7
S Zugriffschutz auf Ordner Allgemeine Java-Themen 5
E ordner rekursiv durchsuchen Allgemeine Java-Themen 6
E Ordner rekursiv kopieren Allgemeine Java-Themen 8
P Datei aus Ordner wird nicht gelesen Allgemeine Java-Themen 2
4 Java Ordner Allgemeine Java-Themen 27
S auf freigebene Ordner zugreifen Allgemeine Java-Themen 6
F Ordner auslesen und in Editor ausgeben Allgemeine Java-Themen 7
L Ordner in ZipDatei erstellen Allgemeine Java-Themen 3
V Der Ordner von Java ist gelöscht und ich kann es nicht neu instalieren! Allgemeine Java-Themen 2
S Ordner wechseln wie bei chdir Allgemeine Java-Themen 6
D Ordner Verpfadung Allgemeine Java-Themen 19
B ProcessBuilder: kann Ordner im home nicht finden Allgemeine Java-Themen 2
N Dateien in Ordner einsortieren Allgemeine Java-Themen 11
G Ordner für Dateien finden Allgemeine Java-Themen 3
G Globalen Programm-Ordner herausfinden Allgemeine Java-Themen 7
K settings.properties in den src-ordner schreiben Allgemeine Java-Themen 2
D Ordner mit *.properties in classpath ? Allgemeine Java-Themen 5
D eclipse: Zugriff auf Ordner per code Allgemeine Java-Themen 4
S Einen Ordner zurück von der JarDatei Allgemeine Java-Themen 6
G Programm ausführen, sobald Ordner geöffnet? Allgemeine Java-Themen 21
MQue Ordner anlegen Allgemeine Java-Themen 7
B ZIP - Problem mit dem ersten Ordner Allgemeine Java-Themen 2
M JFileChooser: Ordner anlegen Allgemeine Java-Themen 3
J Verschieben ganzer Dateien (und Ordner) Allgemeine Java-Themen 3
Q ||| Nur Dateien einlesen ohne Ordner. Allgemeine Java-Themen 6
I Diverse Files aus Ordner auslesen Allgemeine Java-Themen 10
M Ordner nach neuester Datei durchsuchen Allgemeine Java-Themen 4
D Dateien und ordner ausgabe Allgemeine Java-Themen 5
G Subclipse + svn:ignore - Ordner manuel ignorieren? Allgemeine Java-Themen 2
Y Ordner löschen Allgemeine Java-Themen 2
D Auf Laufwerk bzw. Ordner auf einem Server zugreifen Allgemeine Java-Themen 7
T Ordner überwachen Allgemeine Java-Themen 6
TheJavaKid Ordner in Zip laden Allgemeine Java-Themen 21
D Linux Link wird als Ordner interpretiert? Allgemeine Java-Themen 2
A Alle Ordner durchsuchen und Dateien finden Allgemeine Java-Themen 2
F Alle Files im Ordner nach Dateinamen durchsuchen Allgemeine Java-Themen 28
F Dateien in einem Ordner zählen Allgemeine Java-Themen 15
H Klassen aus einem Ordner zur Laufzeit laden. Allgemeine Java-Themen 6
André B. Sucher erfasst nur Ordner Allgemeine Java-Themen 10
M ganzen Ordner mit URL angeben Allgemeine Java-Themen 4
K Ordner/Dateistruktur in Objekten nachbilden Allgemeine Java-Themen 6
N Inhalte aller Txts in einem Ordner Addieren Allgemeine Java-Themen 5
N Alledateien in einem Ordner in ein Vector speichern Allgemeine Java-Themen 19
F Ordner erstellen Allgemeine Java-Themen 3
M Bilder-Ordner kann im JAR-File nicht gefunden werden Allgemeine Java-Themen 15
B dynamisches Laden aller Klassen in einem Ordner ?? Allgemeine Java-Themen 5
F Laden von bestimmten Daten aus TAR Archiv Allgemeine Java-Themen 23
J PDF-Datei aus JAR-Archiv in Dateisystem kopieren Allgemeine Java-Themen 1
Seikuassi Input/Output ZipOutputStream erzeugt zu großes .zip-Archiv Allgemeine Java-Themen 3
V Input/Output Swing Icons in Jar Archiv laden Allgemeine Java-Themen 10
C jar Archiv im Programm aus dessen jar extrahieren Allgemeine Java-Themen 2
H JAVA-ARCHIV-PROBLEME - pls help :( Allgemeine Java-Themen 4
D auf Bilder im Jar-Archiv zugreifen Allgemeine Java-Themen 11
T jar Archiv auf Server ausführen Allgemeine Java-Themen 3
trash Das große Problem: .jar Archiv Allgemeine Java-Themen 19
multiholle Resourcen aus Jar-Archiv laden Allgemeine Java-Themen 5
D verschlüsseltes Archiv erstellen Allgemeine Java-Themen 5
Balbes Auf Datei im Dateisystem aus einem jar-Archiv zugreifen Allgemeine Java-Themen 4
B Jar-Archiv Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben