2016-06-04 5 views
0

Ich war nicht ganz sicher, wie ich diese Frage titulieren sollte, aber ich habe eine Art Bug, den ich nicht wirklich verstehe.Nach der Rekursion konnte ich keine Dateien zur Liste hinzufügen Java

Ich habe eine Methode, die rekursiv die Unterverzeichnisse mit der Bezeichnung "Berechnung" eines Stammverzeichnisses für seine Dateiinhalte durchsucht. Und es scheint zu funktionieren, wenn ich auf die Konsole drucke. Wenn ich jedoch versuche, diese Dateien zu einer Liste von Dateien hinzuzufügen, scheint es nicht zu funktionieren, Größe ist 0 ...

Wie kann ich diese Dateien zu einer Liste oder Datei [] oder eine beliebige Art von Datenstruktur hinzufügen damit ich sie verarbeiten kann?

Hier ist mein Code:

public static List<File> walkDirectory(String path) { 

    List<File> fileList = new ArrayList<File>(); 

    File root = new File(path); 
    File[] list = root.listFiles(); 

    if (list == null) return null; 

    for (File f : list) { 

     if (f.isDirectory()) { 
      walkDirectory(f.getAbsolutePath()); 
     } 

     else if (f.getParentFile().getName().contains("calculation")) { 
      fileList.add(f); // does not work... 
      System.out.println("File: " + f.getAbsoluteFile()); 

     } 
    } 

    return fileList; 
} 

public static void main(String[] args) { 
    System.out.println(FileWalker.walkDirectory("/path/to/root/directory").size()); // size is 0 
} 

Antwort

2

Verschieben Sie diese Zeile List<File> fileList = new ArrayList<File>(); nach außerhalb der Funktion walkDirectory. Was passiert hier? Sie erstellen immer dann eine neue DateiList-Variable, wenn Sie eine Funktion aufrufen.

Entweder fileList private statische Variable der Klasse machen oder List Argument in Funktion selbst übergeben.

+0

Willst du sagen, FileList ein Klassenfeld zu machen? –

+1

Ich denke, du hast deine Antwort :) Wenn nicht, zögere nicht zu fragen –

+0

Das scheint zu funktionieren! Obwohl ich das schon vorher versucht hatte, aber ich hatte die ArrayList nicht außerhalb der Methode –

1
if (f.isDirectory()) { 
     walkDirectory(f.getAbsolutePath()); 
    } 

Sie kehren nicht zurück oder mit dem Ergebnis der walkDirectory() nichts tun. Wahrscheinlich möchten Sie die Ergebnisse in einer Liste speichern und sie nach Abschluss der Schleife zurückgeben.

+0

Ja das ist, was ich zu erreichen versuche –