Alle Files eines Directories einlesen

Status
Nicht offen für weitere Antworten.

lisbett

Mitglied
Hi!
Ich hab jetzt schon eine Weile gesucht und nix passendes fuer mein Problem gefunden - ich hoffe irgendjemand von euch kann mir helfen!
Also: ich moechte eigentlich was ganz einfaches machen: naemlich alle Files eines Directories einlesen - das funktioniert soweit auch ganz gut - aber sobald ich die Klasse in einem .jar File exportiert habe klappt das nicht mehr.

Hier ein bisschen Code:
Code:
        String path = "/images/classes";
        java.net.URL url = getClass().getResource(path);
        logger.info("url " + url);
        String fileName = url.getPath();
        File file = new File(fileName);
        logger.info("directory? " + file.isDirectory());
        File[] files = file.listFiles();

...

Das produziert mir dann folgende Ausgaben:
INFO: url jar:file:/export/home/lisbett/work/project/dist/Jedi.jar!/images/classes
INFO: directory? false
 
Und dann ist files natuerlich null. :(
Frage ist nur, warum isDirectory() false zurueckliefert???? Was mache ich falsch und wie geht das richtig???

Gruss, Claudia
 
hm stellt sich die frage welches directory auflisten willst und warum du die sache mit der url machst.

liste dir doch erstmal ein bekanntes existierendes verzeichnis auf. zB c:
 
Hallo,
der Pafd wird nicht existieren. Ist die Frage was da aufgelistet werden soll. Mit

File file = new File(path);
System.out.println(file.getAbsoluteFile());

Kann man auf jeden Fall einen absoluten Pfad bekommen. In dem Quelltext oben sieht es ja fast so aus, als ob aus einem Jar file geladen werden soll. Oder nicht? Dann müsste man wohl den Class Loader benutzen, da dass jar wohl nicht geladen ist. Vielleicht soll es auch in einer Webanwendung sein, dann müsste man getContextPath() verwenden.

Ich denke der relative Pfad ist einfach nicht vorhanden, einfahc mal mit file.exists() testen.

Viel Spass
Alex
 
Hi!
Es soll tatsaechlich aus einem jar geladen werden. In dem Jar File existiert das directory (jedenfalls kann man es sich unter netbeans angucken).
In dem directory liegen images, die ich in einer Tabelle darstellen will; in besagter Funktion versuche ich erstmal mir alle images aus dem Verzeichnis rauszusuchen; wenn ich das gleiche mit einem ganz speziellen Filenamen mache, funktioniert das - sprich folgender Code geht:

Code:
String path = "/images/classes/bild1.png";
 java.net.URL url = getClass().getResource(path); 
 String fileName = url.getPath();
File file = new File(fileName); 
...

D.h. in meinen Augen wird das jar vernuenftig geladen, oder?
DasProblem scheint das directory zu sein...
Noch irgendwelche Hinweise? Hab ich vielleicht sonst was uebersehen??

Gruss, Claudia
 
Hallo,
in Jar files ist es etwas anderes, da Jar vieles Archive sind. Dort funktioniert listFiles() nicht (soweit ich weiß). Ich denke es liegt daran, dass man zum Auflisten der Files das Jar sozusagen auspacken müsste und dies kann listFiles() nicht.

Abhilfe schafft die Klasse JarEntry. Ich habe zu Testzwecken folgendes Jar angelegt:

Code:
D:\t>jar cvf pics.jar images
Manifest wurde hinzugef³gt.
Hinzuf³gen von: images/ (ein = 0) (aus = 0) (gespeichert 0 %)
Hinzuf³gen von: images/classes/ (ein = 0) (aus = 0) (gespeichert 0 %)
Hinzuf³gen von: images/classes/bild1.jpg (ein = 0) (aus = 0) (gespeichert 0 %)
Hinzuf³gen von: images/classes/bild2.jpg (ein = 0) (aus = 0) (gespeichert 0 %)
Hinzuf³gen von: images/classes/bild3.bmp (ein = 0) (aus = 0) (gespeichert 0 %)
Hinzuf³gen von: images/classes/party/ (ein = 0) (aus = 0) (gespeichert 0 %)
Hinzuf³gen von: images/classes/party/sonne.png (ein = 0) (aus = 0) (gespeichert
0 %)
Hinzuf³gen von: images/classes/urlaub/ (ein = 0) (aus = 0) (gespeichert 0 %)
Hinzuf³gen von: images/classes/urlaub/strand.gif (ein = 0) (aus = 0) (gespeicher
t 0 %)

Folgendes kleines Testprogramm gibt alle Dateinamen aus pics.jar aus:

Code:
import java.io.IOException;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;

public class JarExplorer {
    
    /** Creates a new instance of JarExplorer */
    public JarExplorer() {
    }
    
    public static void main(String[] args) {
        JarFile jarFile;
        try {
            jarFile = new JarFile("d://t/pics.jar");
            
            Enumeration<JarEntry> entries = jarFile.entries();            
            while (entries.hasMoreElements()) {
                JarEntry entry = entries.nextElement();
                if(!entry.isDirectory())
                System.out.println("Entry: " + entry.getName());
            }
        } catch (IOException ex) {            
            ex.printStackTrace();
        }
    }
}

Ich denke damit sollte dein Problem gelöst sein. Vielleicht noch nach bestimmten Dateitypen filtern.

Alex
 
Achja, glatt vergessen, die Ausgabe des Programms sind dann alle Dateinamen aus dem Beispiel:

run-main:
Entry: META-INF/MANIFEST.MF
Entry: images/classes/bild1.jpg
Entry: images/classes/bild2.jpg
Entry: images/classes/bild3.bmp
Entry: images/classes/party/sonne.png
Entry: images/classes/urlaub/strand.gif
BUILD SUCCESSFUL (total time: 1 second)
 
Hi Alex!
Bin erst jetzt dazu gekommen, deinen Vorschlag auszuprobieren!
Funktioniert tatsaechlich so - danke!!
Gruss, Claudia
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben