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

下面是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日

相关文章

  • java 使用URLDecoder和URLEncoder对中文进行处理

    下面是详细讲解“java 使用URLDecoder和URLEncoder对中文进行处理”的完整攻略。 什么是URLDecoder和URLEncoder URLDecoder和URLEncoder是Java中内置的两个工具类,用于将字符串进行URL编码和解码。URL编码是指将字符串中的特殊字符(如中文)转换成%XX的形式,以便在URL中传输。URL解码则是将%…

    Java 2023年5月20日
    00
  • Mybatis中的resultType和resultMap查询操作实例详解

    “Mybatis中的resultType和resultMap查询操作实例详解”是关于Mybatis中两种结果映射方式的详细介绍。在Mybatis中,我们可以通过resultType和resultMap两种方式来实现查询操作。这两种方式的本质区别是:resultType是直接将查询结果映射为实体类对象,而resultMap是通过自定义映射规则将查询结果映射为实…

    Java 2023年5月19日
    00
  • 如何使用Java Attach API?

    使用Java AttachAPI的目的是能够在JVM运行时动态的获取信息或者执行相关操作,比如获取Java Heap Memory的占用情况,获取JVM线程池的线程数量等信息。简单来说,AttachAPI可以对一个已经运行的Java进程进行控制,包括启动、停止、dump内存、获取日志等等。 下面是使用Java AttachAPI的完整使用攻略: 1. 确认J…

    Java 2023年5月11日
    00
  • Java Kafka实现延迟队列的示例代码

    Java Kafka是一款流行的分布式消息队列,支持高效的消息传递以及延迟队列的实现,下面详细讲解如何通过Java Kafka实现延迟队列的示例代码。 延迟队列简介 延迟队列是指将消息发送到消息队列中,消息并不会立即发送给消费者,而是在一定的时间后再发送给消费者,这种方式被称之为延迟队列。 Java Kafka延迟队列示例 下面给出Java Kafka实现延…

    Java 2023年5月20日
    00
  • SpringBoot项目打成War布署在Tomcat的详细步骤

    下面为您介绍SpringBoot项目打成War包并部署在Tomcat的详细步骤。 一、将SpringBoot项目转化为War包 在pom.xml文件中修改packaging为war,添加servlet-api依赖。 <packaging>war</packaging> <!– 添加servlet-api依赖 –> &l…

    Java 2023年5月19日
    00
  • springboot中自定义异常以及定制异常界面实现过程解析

    Spring Boot是目前最流行的Java Web开发框架之一,它提供了很多便捷的功能,包括处理异常。但是对于一些特殊的业务,我们需要自定义异常以及定制异常界面。接下来,我将详细介绍springboot中怎样实现自定义异常以及定制异常界面。 一、自定义异常 在Spring Boot中,我们可以通过继承Exception类或其子类来自定义异常。下面以订单异常…

    Java 2023年5月27日
    00
  • SpringBoot整合SpringDataJPA

    Spring Boot整合Spring Data JPA Spring Data JPA是Spring Framework的一部分,它提供了一种简单的方式来访问关系型数据库。Spring Boot提供了对Spring Data JPA的自动配置支持,使得整合Spring Data JPA变得非常简单。在本文中,我们将介绍如何使用Spring Boot整合Sp…

    Java 2023年5月15日
    00
  • Spring Boot 入门之消息中间件的使用

    消息中间件是一种常用的分布式系统解决方案,可以帮助不同的应用程序之间进行异步通信。在Spring Boot中,可以使用Spring Boot提供的集成库来方便地使用消息中间件。在本文中,我们将详细讲解Spring Boot入门之消息中间件的使用,并提供两个示例来演示如何使用消息中间件。 Spring Boot入门之消息中间件的使用 以下是使用消息中间件的基本…

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