# Verzeichnisinhalt aus JAR Datei lesen



## tincup (12. Mrz 2008)

Hi.

Ich möchte den Inhalt (die Dateien) eines Verzeichnises lesen. Diese Verzeichnis befindet sich aber in einer der JAR Dateien im Classpath. Weiss jemand wie und ob das geht?

Mit dem URL Objekt von Class#getResource hatte ich keinen Erfolg und Class#getResourceByStream gibt auch nichts vernünftiges aus, wenn ich mir damit das Verzeichnis hole (was sollte aus dem Stream auch schon rauskommen).

Danke schonmal.


----------



## Wildcard (12. Mrz 2008)

Schau mal hier:
http://java.sun.com/javase/6/docs/api/java/util/jar/JarFile.html


----------



## tincup (12. Mrz 2008)

Danke schonmal für die Antwort aber ich glaube das ist nicht das richtige für mich.
Das JarFile Objekt muss ja laut der Doku mit einer expliziten Angabe des entsprechenden jar-Files initialisiert werden. Aber dessen Position habe ich ja nicht sicher, ich weiss nur, dass es wohl irgendwo über den Classpath eingebunden wurde.


----------



## Wildcard (12. Mrz 2008)

Ach du kennst die jar gar nicht?
Nun, dann ist's schwierig, da es sich natürlich nicht um ein echtes Verzeichnis handelt, sondern um einen einfachen Zip Entry.
Wofür brauchst du das? Vielleicht gibt es eine bessere Lösung.


----------



## tincup (12. Mrz 2008)

Also vielleicht doch mal etwas mehr zum Problem:

Ich habe ein Verzeichnis mit Files, sagen wir data/. Dort drin gibt es file1, file2, file3 etc.

Dieses Verzeichnis wird mit ins Jar-File gepackt. Explizit auf einzelne Files zugreifen kann ich ja z.B. mit sowas wie


```
InputStream input = this.getClass().getResourceAsStream("/data/file1");
```

Jetzt möchte ich aber stattdessen den Inhalt des /data Verzeichnisses auslesen. OK eine Variante wäre das Vorspeichern der entsprechenden Einträge in ein File, aber ich dachte es geht schöner.


----------



## Wildcard (12. Mrz 2008)

Man kann natürlich die URL auswerten um zum jar zu kommen, aber so prickelnd finde ich das nicht.
Vielleicht kann ein ResourceBundle dir helfen, oder wenn es zum angestrebten Ergebnis passt, kannst du auch über OSGi Bundles nachdenken (ich kenne ja deinen Anwendungsfall nicht).
Vielleicht gibt es aber auch eine ganz einfache Lösung die mir gerade nicht einfällt  ???:L

Edit: Du könntest allerdings die Dateien wieder in ein jar oder zip packen und dann einen JarInputStream verwenden.


----------



## tincup (12. Mrz 2008)

Danke nochmal. Das mit den Bundles ist eine echt interessante Sache, aber ich glaub bei meinem Problem hilft mir das jetzt auch nich so direkt weiter  :wink: 

Werde wohl die File-Liste in ein bestimmtes, festes File speichern (notfalls jedesmal vorm Jar erstellen) und aus diesem dann den Inhalt des Verzeichnisses lesen.


----------



## Wildcard (12. Mrz 2008)

Hast du das Edit gesehen? Das ist vielleicht einfacher. Weil du das schön mit zB Ant automatisieren kannst.


----------



## tincup (12. Mrz 2008)

Achso ja gute Idee eigentlich. So werde ich es wohl machen, dann habe ich ja wieder ein explizites Objekt in der Hand, was das Archiv repräsentiert. Danke schön.


----------



## tincup (12. Mrz 2008)

Mal aus Interesse, wie wurde dieser Thread jetzt so schnell abgeharkt ;-). Oder warst du das?


----------



## Wildcard (12. Mrz 2008)

Das war ich, da für mich derzeit keine Frage mehr erkennbar war.


----------



## tincup (12. Mrz 2008)

Jo ist ja auch genau richtig, hatte mich nur gewundert, wie es passiert ist.


----------



## Wildcard (12. Mrz 2008)

In Wahreit liegt ein cleveres Lisp Programm dahinter das Stev vor 4 Monaten eingebaut hat. Es lernt beständig und hakt die meisten Threads automatisch ab, sobald der Fragesteller glücklich ist  :wink:


----------



## Janus (12. Mrz 2008)

lisp? für sowas verwendet man prolog. frevler!


----------



## Wildcard (12. Mrz 2008)

Beschwer dich bei Stev, ich bin unschuldig.


----------

