我試圖獲取目錄中所有文本文件的名稱。如果目錄有子目錄,那麼我也想獲得這些文件。我不知道如何讓這個過程繼續任何數目的子目錄。遞歸查找目錄中的所有文本文件
現在下面的代碼只是獲取當前目錄中的所有文本文件和目錄中的子目錄。對於找到的每個子目錄,它還找到任何文本文件和更深的子目錄。問題是,如果那些更深的子目錄有更深的子目錄,那麼我沒有找到所有的文本文件。這似乎是一個需要遞歸的問題,因爲我不知道這會發生多深。
這裏是我到目前爲止的代碼:
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");
編輯:得到它的工作,謝謝奧拉夫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);
}
}
}
簡短而親切。 +1 –
謝謝,我認爲這是我需要的。我會嘗試一下 – asimes