# File.listFiles() funktioniert nicht...



## hdjks (17. Sep 2015)

Hallo Leute,

ich habe ein kleines Problem:

ich habe ein Programm geschrieben, welches alle File-Objekte eines Ordners(Der Ordner enthält um die 400 Dateien) mit Hilfe einer for each-Schleife und der Methode .listFiles() 
einlesen soll. Nun sind aber so viele dateien in dem Ordner, dass die Methode warum auch immer nichts zurückgibt. (Die for-each-Scheife wirft eine Null-pointer-Exception. Da ich nicht wüsste, wie mann anders Dateien aus einem Ordner lesen könnte, habe ich gehofft, hier im Forum auf Hilfe zu treffen. Ich habe mir mal die .listFiles()-Methode mit dem jd-Plugin für Eclipse angesehen, wüsste aber nicht, wie ich diese "verbessern" sollte. (Falls es hilft, hier der Code:


```
for(File file:Files.getDirFile[dir].listFiles(){
      //führe irgendwelchen code aus
}
```
)

Danke im Voraus!!


----------



## Thallius (17. Sep 2015)

Ich wette mal das Files.getDirFile[dir] null zurück gibt.

Es ist eine Unsitte solche endlos langen Methodenketten zu basteln, da man keine Möglichkeit hat auf Fehler zu testen.

Ordentlich würde das so aussehen:


```
File path = new File ("WasWeißIchFürnPfad");
if(path!=null)
{
    for(File file : path.listFiles() )
    {
    }
}
```

Gruß

Claus


----------



## CursedCookie (17. Sep 2015)

Als Unsitte würde ich es bei zwei Punkten noch nicht bezeichnen,  aber grundlegend hat @Thallius recht. Mit eine klären Aufteilung kann man einfach besser sehen was null ist,  da einen die Fehlermeldung direkt in die Zeile schickt und man das dort überprüfen kann


----------



## hdjks (19. Sep 2015)

Aber da ich alle Dateien ein eine Arraylist einelesen will, muss ich jede Datei "Einzeln" ansprechen.


----------



## Joose (21. Sep 2015)

Ja kannst du ja auch machen.
Keiner hat gesagt das du es nicht darfst  
Nur das man eben etwas mehr Code schreiben sollte damit man leichter auf Fehler aufmerksam wird und diese einfacher beheben kann.


----------



## hdjks (21. Sep 2015)

Sas meine ich doch gar nicht ich meine, dass ich gerne jedes element dieses Ordners automatisch über eine for-each Schleife oder so in eine Arraylist  einlesen will, dass heißt ich habe keine Lust, über 400 Objekte einzeln zu erzeugen, wobei ich es doch auch anders ganz einfach machen könnte.


----------



## InfectedBytes (21. Sep 2015)

es hat auch niemand gesagt das du das tun sollst. 

```
File path = new File ("WasWeißIchFürnPfad");
if(path!=null)
{
    for(File file : path.listFiles() )
    {
    }
}
```
Damit holst du dir ein File objekt auf das Verzeichnis und gehst alle Dateien dadrin durch. 
Falls du die Dateien in den Unterordner auch durchgehen willst, kannst das ganze ggf rekursiv lösen


----------



## hdjks (21. Sep 2015)

Und das geht halt eben nicht, weil dort so viele Dateien in dem Ordner lagern, dass er die, warum auch immer,


----------



## InfectedBytes (21. Sep 2015)

hdjks hat gesagt.:


> Und das geht halt eben nicht, weil dort so viele Dateien in dem Ordner lagern, dass er die, warum auch immer,


Der Satz kommt mir etwas unvollständig vor...

Hast du es mal genau so wie beschrieben ausprobiert? Die Anzahl der Dateien im Ordner hat nämlich keinerlei Einfluss auf die Funktionsweise der Methode, das einzige was halt sein könnte, ist dass es bei einer großen Anzahl an Dateien eben ein paar millisekunden länger dauert.


----------



## Thallius (21. Sep 2015)

InfectedBytes hat gesagt.:


> Der Satz kommt mir etwas unvollständig vor...
> 
> Hast du es mal genau so wie beschrieben ausprobiert? Die Anzahl der Dateien im Ordner hat nämlich keinerlei Einfluss auf die Funktionsweise der Methode, das einzige was halt sein könnte, ist dass es bei einer großen Anzahl an Dateien eben ein paar millisekunden länger dauert.



Diese ms können durchaus auch minuten werden. Ich hatte mal eine Fehler in meiner Software die dann meine Platte vom Root aus gelesen hat. Nach 5minuten hatte ich dann abgebrochen...

Die Methode scheint extrem langsam zu sein. Denn wenn ich sowas in C schreibe mit OS Funktionen dauert es wirklich nur ein paar Sekunden.

Gruß

Claus


----------



## hdjks (23. Sep 2015)

Danke für die Tipps!
Ps: Der Satz kommt mir etwas unvollständig vor...
Mein Browser hat sich danach aufgehangen und ich hab etwas gebraucht um ihn wieder hinzukriegen


----------

