• Tags
  •         
  • www.breakyizhan.com
  •    

    先决条件:Java中的Java.io.File类

    给定一个主目录/文件夹,列出它的所有文件,如果这个目录有其他嵌套的子目录,也列出它们的列表文件。

    在上述问题中很容易观察到简单的递归模式。

    递归算法:

    1.为主目录创建File对象。
    2.获取主目录的文件数组。
    3.如果array [i]是一个文件:
       - >打印出文件名。
    4.如果array [i]是目录:
       - >打印目录名称。
       - >获取当前子目录的文件数组。
       - >使用当前子目录重复步骤3和4。
    
    5.使用下一个数组[i]重复步骤3和4。
    

    Java程序列出目录中的所有文件和嵌套的子目录的方法

    // Recursive Java program to print all files
    // in a folder(and sub-folders)
     
    import java.io.File;
     
    public class GFG 
    {
         static void RecursivePrint(File[] arr,int index,int level) 
         {
             // terminate condition
             if(index == arr.length)
                 return;
              
             // tabs for internal levels
             for (int i = 0; i < level; i++)
                 System.out.print("\t");
              
             // for files
             if(arr[index].isFile())
                 System.out.println(arr[index].getName());
              
             // for sub-directories
             else if(arr[index].isDirectory())
             {
                 System.out.println("[" + arr[index].getName() + "]");
                  
                 // recursion for sub-directories
                 RecursivePrint(arr[index].listFiles(), 0, level + 1);
             }
               
             // recursion for main directory
             RecursivePrint(arr,++index, level);
        }
         
        // Driver Method
        public static void main(String[] args)
        {
            // Provide full path for directory(change accordingly)  
            String maindirpath = "C:\Users\Gaurav Miglani\Desktop\Test";
                     
            // File object
            File maindir = new File(maindirpath);
              
            if(maindir.exists() && maindir.isDirectory())
            {
                // array for files and sub-directories 
                // of directory pointed by maindir
                File arr[] = maindir.listFiles();
                 
                System.out.println("**********************************************");
                System.out.println("Files from main directory : " + maindir);
                System.out.println("**********************************************");
                 
                // Calling recursive method
                RecursivePrint(arr,0,0); 
           } 
        }
    }
    

    输出:

    **********************************************
    Files from main directory : C:\Users\Gaurav Miglani\Desktop\Test
    **********************************************
    Cormen.pdf
    Extra-Items.pdf
    XYZ.pdf
    [Docs]
        A.docx
        B.doc
        C.docx
    ABC.pdf
    JKL.pdf
    [sheets]
        XXX.csv
        YYY.csv
    results.pdf
    [Resumes]
        [Before2016]
            Resume2015.doc
            Resume2016.doc
            [Before2014]
                Resume2014.doc
        Resume2017.doc
        Resume2017.pdf
            QA.doc
    Testing.pdf

     

    下面是另一个递归程序。这里我们只对嵌套的子目录使用递归。对于主目录文件,我们使用foreach循环

    // Recursive Java program to print all files
    // in a folder(and sub-folders)
    
    import java.io.File;
    
    public class GFG 
    {
         static void RecursivePrint(File[] arr, int level) 
         {
             // for-each loop for main directory files
             for (File f : arr) 
             {
                 // tabs for internal levels
                 for (int i = 0; i < level; i++)
                     System.out.print("\t");
                
                 if(f.isFile()) 
                     System.out.println(f.getName());
                 
                 else if(f.isDirectory()) 
                 { 
                     System.out.println("[" + f.getName() + "]");
                 
                     // recursion for sub-directories
                     RecursivePrint(f.listFiles(), level + 1);
                 }
             }
        }
        
        // Driver Method
        public static void main(String[] args)
        {
            // Provide full path for directory(change accordingly)  
            String maindirpath = "C:\Users\Gaurav Miglani\Desktop\Test";
                    
            // File object
            File maindir = new File(maindirpath);
             
            if(maindir.exists() && maindir.isDirectory())
            {
                // array for files and sub-directories 
                // of directory pointed by maindir
                File arr[] = maindir.listFiles();
                
                System.out.println("**********************************************");
                System.out.println("Files from main directory : " + maindir);
                System.out.println("**********************************************");
                
                // Calling recursive method
                RecursivePrint(arr, 0); 
           } 
        }
    }
    

    输出:

    **********************************************
    Files from main directory : C:\Users\Gaurav Miglani\Desktop\Test
    **********************************************
    Cormen.pdf
    Extra-Items.pdf
    XYZ.pdf
    [Docs]
        A.docx
        B.doc
        C.docx
    ABC.pdf
    JKL.pdf
    [sheets]
        XXX.csv
        YYY.csv
    results.pdf
    [Resumes]
        [Before2016]
            Resume2015.doc
            Resume2016.doc
            [Before2014]
                Resume2014.doc
        Resume2017.doc
        Resume2017.pdf
            QA.doc
    Testing.pdf

     
    转载请保留页面地址:https://www.breakyizhan.com/java/5021.html