2017-09-20 2 views
0

Ich möchte eine Methode implementieren, die alle Dateien in einem Ordner und seinen Unterordnern finden und so weiter ... Ich habe es durch Rekursion implementiert, aber ich weiß nicht, was falsch ist. kann mir jemand helfen?Was ist los mit meiner Rekursion

private void fileLister(){ 
    File d = new File(adress); 
    File[] existingFiles =d.listFiles(); 
    for(int i = 0;i<existingFiles.length;i++){ 

     if(existingFiles[i].isDirectory()){ 

      fileLister(); 

     } 
     else{ 

      List<File> templist = Arrays.asList(existingFiles); 
       allExsistingFiles.addAll(templist); 
     } 
    } 
} 
+2

'adress' wird die gleichen ... – Fildor

+0

Pässe in' Datei d' als Parameter an die Methode immer sein. Außerdem sollten Sie nicht jedesmal 'existingFiles' zum Array hinzufügen, wenn Sie ein Nicht-Verzeichnis-Element finden. Es genügt 'allExsistingFiles.add (existingFiles [i])'. –

+0

Es ist eine einfache Änderung, damit es so funktioniert, wie Sie es geplant haben. Ich habe unten eine Antwort mit einer minimalen Änderung an Ihrem Code hinzugefügt. Wenn Sie denken, dass es sich lohnt, können Sie es akzeptieren, indem Sie auf das Häkchen neben der Antwort klicken und es grün machen? Up-Vote ist auch schön :-) – Assafs

Antwort

2

Sie müssen jeden Aufruf der rekursiven Methode auf das Verzeichnis haben Sie in diesem Anruf arbeiten. Die minimale Änderung sollte sein:

private void fileLister(File directory){ 
    File[] existingFiles =directory.listFiles(); 
    for(int i = 0;i<existingFiles.length;i++){ 

     if(existingFiles[i].isDirectory()){ 

      fileLister(existinFiles[i]); 

     } 
     else{ 

      List<File> templist = Arrays.asList(existingFiles); 
       allExsistingFiles.addAll(templist); 
     } 
    } 
} 
-1

Überprüfen IT:

public void showAll(String directoryName, ArrayList<File> files) { 
    File dir = new File(directoryName); 

    File[] fL = dir.listFiles(); 
    for (File file : fL) { 
     if (file.isFile()) { 
      files.add(file); 
     } else if (file.isDirectory()) { 
      listf(file.getAbsolutePath(), files); 
     } 
    } 
}