2013-10-24 38 views
0

嗨,大家好我需要創建一個方法來顯示當前目錄,文件,子目錄以及給定用戶必須選擇的文件的這些子目錄的文件。我完成了這項任務,下面的代碼打印出了適當的輸出。它從f.getParentFile()打印下來,這就是想要的。現在我想用遞歸來代替。我正在嘗試學習遞歸的概念。我知道你需要一個基本案例,然後是你的歸納步驟,但是當我嘗試將代碼修改爲遞歸時,當它遇到第一個子目錄時,我會得到一個無限循環。任何反饋將不勝感激。將工作代碼轉換爲遞歸方法

非遞歸工作代碼

static void listFiles(File f) 
{ 
    try 
    { 
     if (f.exists()) 
     { 
      File dir = f.getParentFile(); 

      if (dir.isDirectory()) 
      { 
       System.out.println("Directory: " + dir); 

       File[] list = dir.listFiles(); 
       for (int i = 0; i < list.length; i++) 
       { 
        if (list[i].isDirectory()) 
        { 
         System.out.println("\tSubdirectory: " + list[i].getName() + "\tsize :" + (list[i].length()/1024) + "KB"); 
         File[] listFiles = list[i].getAbsoluteFile().listFiles(); 
         for (int j = 0; j < listFiles.length; j++) 
         { 
          System.out.println("\t\tSubdirectory files: " + listFiles[j].getName() + "\tsize :" + (listFiles[j].length()/1024) + "KB"); 
         } 
        } 
        else if (list[i].isFile()) 
        { 
         System.out.println("\tFiles: " + list[i].getName() + "\tsize :" + (list[i].length()/1024) + "KB"); 
        } 
       } 
      } 
     } 
     else throw new FileNotFoundException("File ******** does not exists"); 
    } 
    catch(NullPointerException | FileNotFoundException e) 
    { 
     e.printStackTrace(); 
    } 
} 

試圖遞歸

static void listFiles(File f) 
{ 
    try 
    { 
     if (f.exists()) 
     { 
      File dir = f.getParentFile(); 

      if (dir.isDirectory()) 
      { 
       System.out.println("Directory: " + dir); 

       File[] list = dir.listFiles(); 
       for (int i = 0; i < list.length; i++) 
       { 
        if (list[i].isDirectory()) 
        { 
         System.out.println("\tSubdirectory: " + list[i].getName() + "\tsize :" + (list[i].length()/1024) + "KB"); 
         listFiles(list[i].getAbsoluteFile()); 
        } 
        else if (list[i].isFile()) 
        { 
         System.out.println("\tFiles: " + list[i].getName() + "\tsize :" + (list[i].length()/1024) + "KB"); 
        } 
       } 
      } 
     } 
     else throw new FileNotFoundException("File ******** does not exists"); 
    } 
    catch(NullPointerException | FileNotFoundException e) 
    { 
     e.printStackTrace(); 
    } 
} 
+0

如果您想了解遞歸,開始更簡單一些,比如fa ctorials。 – nhgrif

回答

1

這實在是很簡單:)

public static void main(String[] args) { 
    filesInFolder("./"); 
} 

public static void filesInFolder(String filename) { 
    File dir = new File(filename);   
    for (File child : dir.listFiles()) { 
     System.out.println(child.getAbsolutePath()); 
     if (child.isDirectory()){ 
      filesInFolder(child.getAbsolutePath()); 
     } 
    } 
}