Rekursiv alle text-Dateien finden Sie im Verzeichnis
Ich versuche dem Namen alle text-Dateien in einem Verzeichnis. Wenn das Verzeichnis hat Unterverzeichnisse habe ich dann auch bekommen wollen, alle text-Dateien in diese als gut. Ich bin mir nicht sicher, wie dieser Prozess weiter für eine beliebige Anzahl von Unterverzeichnissen.
Recht der code jetzt unten bekommt nur alle text-Dateien im aktuellen Verzeichnis und Unterverzeichnissen in das Verzeichnis. Für jedes Unterverzeichnis gefunden, es findet auch keine text-Dateien und tieferen Unterverzeichnissen. Das problem ist, dass wenn diese tiefere Unterverzeichnisse haben noch eine tiefere Unterverzeichnisse, dann bin ich nicht bei der Suche nach text-Dateien. Dies scheint ein problem, das erfordert eine Rekursion, weil ich nicht weiß, wie tief diese gehen soll.
Hier ist mein code bisher:
File rootDirectory = new File(rootDir);
if (rootDirectory.isDirectory()) {
System.out.println("Valid directory");
File[] listOfFiles = rootDirectory.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
String iName = listOfFiles[i].getName();
if (listOfFiles[i].isFile()) {
if (iName.endsWith(".txt") || iName.endsWith(".TXT")) {
System.out.println("File: "+iName);
}
}
if (listOfFiles[i].isDirectory()) {
System.out.println("Directory: "+iName);
File[] subList = listOfFiles[i].listFiles();
for (int j = 0; j < subList.length; j++) {
String jName = subList[j].getName();
if (subList[j].isFile()) {
if (jName.endsWith(".txt") || jName.endsWith(".TXT")) {
System.out.println("\tFile: "+jName);
}
}
if (subList[j].isDirectory()) {
System.out.println("\tDirectory: "+jName);
}
}
}
}
}
else System.out.println("Invalid directory");
Bearbeiten: Habe es funktioniert, danke Olaf Dietsche:
public void findFiles(File root, int depth) {
File[] listOfFiles = root.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
String iName = listOfFiles[i].getName();
if (listOfFiles[i].isFile()) {
if (iName.endsWith(".txt") || iName.endsWith(".TXT")) {
for (int j = 0; j < depth; j++) System.out.print("\t");
System.out.println("File: "+iName);
}
}
else if (listOfFiles[i].isDirectory()) {
for (int j = 0; j < depth; j++) System.out.print("\t");
System.out.println("Directory: "+iName);
findFiles(listOfFiles[i], depth+1);
}
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist ein Rekursives problem
mithilfe der java.nio.Datei-Funktionen von java 7. Ich implementiert, ähnlich func. und fügte einige testen.
Benchmarks bei der Suche nach .txt auf meinem PC
Lesen Sie mehr in der javadoc, es ist eine ziemlich mächtige API
java.nio.Datei.filevisitor javadoc
Die Antwort ist in den tags Ihrer Frage. Verwenden Sie Rekursion. Die Rekursion besteht darin, dass man eine Methode sich selbst aufrufen.
In diesem Fall sollte die Methode drucken Sie alle text-Dateien direkt in ein bestimmtes Verzeichnis, und rufen Sie sich für jedes Unterverzeichnis.