JAVA实现遍历文件夹下的所有文件(递归调用和非递归调用)

yizhihongxing

下面是JAVA实现遍历文件夹下的所有文件(递归调用和非递归调用)的攻略:

1.递归调用遍历文件夹下的所有文件

递归调用是指一个方法调用自身的过程,可以实现对多层嵌套的文件夹进行遍历。下面是一段JAVA代码可以实现递归调用遍历文件夹下的所有文件:

import java.io.File;  
public class Test {  
  public static void main(String[] args) {  
    File root = new File("D:\\test");  
    List<File> files = new ArrayList<File>();  
    getAllFiles(root, files);  
    for(File file : files) {  
      System.out.println(file.getAbsolutePath());  
    }  
  }  
  private static void getAllFiles(File dir, List<File> files) {  
    File[] listFiles = dir.listFiles();  
    if(listFiles != null) {  
      for(File file : listFiles) {  
        if(file.isDirectory()) {  
          getAllFiles(file, files);  
        } else {  
          files.add(file);  
        }  
      }  
    }  
  }  
}  

解释:

  1. File root = new File("D:\\test"); 创建需要遍历的文件夹,这里是"D:\test"。
  2. List<File> files = new ArrayList<File>(); 创建一个保存文件的List。
  3. getAllFiles(root, files); 使用getAllFiles方法来获取文件夹下的所有文件。
  4. private static void getAllFiles(File dir, List<File> files) 方法中,如果当前文件是一个文件夹,就继续遍历其内部,如果不是,则添加到文件List中。

示例:

遍历文件夹"test"下的所有文件。

2.非递归调用遍历文件夹下的所有文件

非递归调用是指在方法内部使用循环完成对每层文件夹的遍历,相对于递归调用更加节省内存。下面是一段JAVA代码可以实现非递归调用遍历文件夹下的所有文件:

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class Test1 {
    public static void main(String[] args) {
        File root = new File("D:\\test");
        List<File> fileList = new ArrayList<File>();
        Stack<File> dirStack = new Stack<File>();
        dirStack.push(root);//把顶级目录压入栈
        while(!dirStack.isEmpty()){
            File file = dirStack.pop();
            if(file.isDirectory()){
                File[] listFiles = file.listFiles();
                if(listFiles != null){
                    for(File tempFile : listFiles){
                        if(tempFile.isDirectory()){
                            dirStack.push(tempFile); //把下层目录压入栈
                        }else{
                            fileList.add(tempFile);
                        }
                    }
                }
            }else{
                fileList.add(file);
            }
        }
        for(File file : fileList){
            System.out.println(file.getAbsolutePath());
        }
    }
}

解释:

  1. File root = new File("D:\\test"); 一样是创建需要遍历的文件夹,这里是"D:\test"。
  2. 创建一个空List存储所有文件,创建一个Stack保存需要遍历的文件夹。
  3. dirStack.push(root); 把顶级目录压入栈中。
  4. while(!dirStack.isEmpty()){....} 如果栈不为空则执行循环。
  5. File file = dirStack.pop(); 取出最后一个需要遍历的文件夹。
  6. 如果是一个文件夹,则获取其全部的文件或目录,并入栈。
  7. 如果是一个文件,则加入到文件List中。

示例:

遍历文件夹"test"下的所有文件。

希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JAVA实现遍历文件夹下的所有文件(递归调用和非递归调用) - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 微信小程序实现语音识别转文字功能及遇到的坑

    实现微信小程序语音识别转文字功能的核心是使用微信开发者工具提供的语音接口进行录音和识别。下面是实现这个功能的详细步骤及遇到的坑: 第一步:引入wx.getRecorderManager()对象 在小程序的页面中,在标签或者.js文件中引入wx.getRecorderManager()对象,该对象是微信小程序提供的用于录制音频的API。 示例代码: const…

    Java 2023年5月23日
    00
  • SpringSecurity跨域请求伪造(CSRF)的防护实现

    为了防止SpringSecurity跨域请求伪造(CSRF)攻击,需要采取一些措施来进行防护实现。下面是实现CSRF防护的步骤: 1.同源检查 这是最常见的CSRF防护方法,包括验证请求的源(Origin),或者Referrer)与app地址是否相同,建议把这个配置在Spring Security中,只需在SpringSecurity的配置类中添加如下代码:…

    Java 2023年5月20日
    00
  • 解决window.location.href之后session丢失的问题

    如果在页面中使用了 window.location.href 来进行页面的跳转,那么有可能会导致 session 丢失的问题,因为这种方式会导致浏览器重新发起一个新的请求,从而导致服务端的 session 丢失。下面是解决这个问题的完整攻略: 一、问题分析 首先分析为什么会导致 session 丢失,原因如下: 当使用 window.location.hre…

    Java 2023年6月16日
    00
  • 关于Java多线程上下文切换的总结

    下面是我对“关于Java多线程上下文切换的总结”这个话题的详细讲解: 简介 Java中的多线程机制可以实现并发执行,提高系统的吞吐量和效率。但是多线程机制也有它的弊端,例如上下文切换会给系统带来额外的开销。因此了解多线程上下文切换的机制对于Java程序员来说是非常重要的。 上下文(Context)切换 上下文切换是指当进程或线程需要访问一个未在当前内存中的资…

    Java 2023年5月18日
    00
  • js实现翻页后保持checkbox选中状态的实现方法

    实现翻页后保持checkbox选中状态,需要将选中状态保存在本地存储中。在页面重新加载时,可以通过读取本地存储的值来恢复checkbox的选中状态。 以下是实现步骤: 1. 给checkbox设置一个唯一的标识符 在checkbox的HTML标签中加入一个唯一的标识符,以便在JavaScript中进行操作。 <input type="chec…

    Java 2023年6月16日
    00
  • java控制台输出图书馆管理系统

    Java控制台输出图书馆管理系统 在Java中,通过控制台输出可以方便快捷地查看程序的执行结果。在图书馆管理系统中,我们可以通过控制台输出来展示图书馆的书籍信息、读者信息、借阅信息等。 步骤 第一步:定义类和变量 在Java中,需要定义类和变量来存储图书馆的信息。我们可以先定义一个Book类来表示图书馆的书籍,包括书名、作者和价格等信息。 public cl…

    Java 2023年5月23日
    00
  • 获取上一页面的URL和本页的URL的方法

    获取上一页面的URL和本页的URL是前端开发中比较基础的操作,可以通过以下几种方式来实现: 获取上一页面的URL 1. 使用document.referrer属性 document.referrer属性可以返回上一页面的URL,但是需要在当前页面进行跳转才能获取。 console.log(document.referrer); // 输出上一页面的URL 2…

    Java 2023年6月15日
    00
  • 如何使用eclipse搭建maven多module项目(构建父子项目)

    下面是如何使用Eclipse搭建Maven多module项目(构建父子项目)的详细步骤: 1. 创建Maven父项目 在Eclipse中,选择菜单“File” -> “New” -> “Other”,选择“Maven” -> “Maven Project”,点击“Next”。 在“New Maven Project”向导中,选择“Creat…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部