2017-01-29 2 views
-1

Ich versuche, durch einen Ordner Schleife und listet alle Dateien mit einer bestimmten Datei mit der Endung. Ich versuche dieses Problem mit einer rekursiven Methode zu lösen, aber ich komme nicht weiter.Java Rekursion Verzeichnis drucken Unterverzeichnis Dateien

private int counter = 0; 
public void printAllJavaFiles(File directory) { 
     printFile(directory); 
     File[] subDirectories = directory.listFiles(); 

     for (File file : subDirectories) { 
      printAllJavaFiles(file); 
     } 
} 

private void printFile(File file) { 
    // Get file extension 
    String fileExtension = ""; 
    int i = file.getName().lastIndexOf('.'); 
    if (i >= 0) { 
     fileExtension = file.getName().substring(i + 1); 
    } 

    if (fileExtension.equals("java")) { 
     System.out.println("File: " + file.getName() + " Size: " + file.length()); 
    } 
} 

Irgendwelche Vorschläge? Ich habe wirklich keine Ahnung, wie man in der Verzeichnisstruktur rauf und runter geht. Es geht nur in den ersten Ordner und sobald es fertig ist, listet es seine Dateien auf, es löst eine Null-Null-Wahrnehmung aus.

+0

Sie sollten sich 'java.nio.file.Files.walkFileTree' ansehen. – rkosegi

+0

Ich muss dieses Problem mit einer rekursiven Methode lösen. – Lithicas

+0

Wo bekommen Sie die NPE? – Sentry

Antwort

4

Sie sollten die File.isDirectory() Methode verwenden. Wie folgt aus:

public void printAllJavaFiles(File directory) { 
    if (directory.isDirectory()) { 
     File[] subDirectories = directory.listFiles(); 

     for (File file : subDirectories) { 
      printAllJavaFiles(file); 
     } 
    }else { 
     printFile(directory); 
    } 
} 

Dokumentation auf dieser Methode hier: https://docs.oracle.com/javase/7/docs/api/java/io/File.html#isDirectory()

Die Idee ist, dass für jede Datei Sie überprüfen, ob es ein Ordner ist, wenn ja, den rekursiven Anruf. Wenn nicht, drucken Sie einfach die Datei.

+0

Vielen Dank für die Rettung von diesen Kopfschmerzen. – Lithicas

+1

@Lithicas Glücklich zu helfen! Wenn dies das Problem gelöst hat, bitte markieren Sie es als die angenommene Antwort =] – nhouser9

+0

Wird tun, sobald es mir erlaubt :) 5-6 Minuten übrig. – Lithicas

Verwandte Themen