先决条件: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
扫描二维码添加微信 
  • ,每次淘宝领取淘宝优惠券,淘宝购物更优惠。现在添加微信,还可以领取机械键盘50元优惠券!添加微信后回复机械键盘即可领取!
    支持我们,就用微信淘宝!