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中Range函数的简单介绍

    Java中Range函数的简单介绍 在Java中,Range函数是一个非常重要和常用的函数,它可以对一定范围内的值进行处理和操作。在本文中,我们将向大家详细介绍Java中Range函数的基本用法和示例。 Range函数的基本用法 Java中的Range函数是指可以对一个范围内的值进行处理和操作的函数。范围可以是数字范围,也可以是其他类型的范围,如字符范围或时…

    Java 2023年5月26日
    00
  • EasyUI框架 使用Ajax提交注册信息的实现代码

    接下来我将详细讲解“EasyUI框架 使用Ajax提交注册信息的实现代码”的完整攻略。 首先,我们需要在我们的网页中引入EasyUI框架的JavaScript和CSS文件,可以使用以下链接引入: <link rel="stylesheet" type="text/css" href="https://c…

    Java 2023年5月20日
    00
  • java中下拉框select和单选按钮的回显操作

    在 Java 中,下拉框(select)和单选按钮(radio button)一般用于提供给用户多个选项中的一个选择。回显操作是一个非常常见的功能,在用户提交表单并进行验证之后,如果表单中有多个选项的输入框,那么就需要将用户选择的结果回显到表单上。在本文中,我们将讲解如何在 Java 中实现下拉框和单选按钮的回显操作。 回显下拉框中的值 下拉框是一种常用的表…

    Java 2023年6月15日
    00
  • 基于重定向RedirectAttributes的用法解析

    基于重定向 RedirectAttributes 的用法解析 在 Spring MVC 中,经常会使用重定向来实现一些跳转的功能。而 RedirectAttributes 则是在使用重定向时用于向跳转页面传递数据的对象。 RedirectAttributes 的用法 使用 RedirectAttributes 一般需要按以下步骤进行: 在处理请求的方法中通过…

    Java 2023年6月15日
    00
  • SpringBoot开发实战之自动配置

    SpringBoot开发实战之自动配置 SpringBoot是基于Spring框架的,由于Spring框架配置麻烦、繁琐等特点,SpringBoot应运而生。其中一个特点是自动配置,它能让应用程序在不配置过多细节的情况下自动地完成配置目标。接下来我们将介绍如何使用自动配置。 一、自动配置的原理 首先,我们需要了解以下内容。 SpringBoot提供了自动配置…

    Java 2023年5月19日
    00
  • Java实现base64图片编码数据转换为本地图片的方法

    让我们来讲解一下Java实现base64图片编码数据转换为本地图片的方法。以下是详细步骤: 步骤一:获取base64编码 首先我们需要获取目标图片的base64编码。可以通过如下方式获取: public static String imageToBase64(String path) { InputStream is = null; byte[] data …

    Java 2023年5月20日
    00
  • Java 网络编程 —— Socket 详解

    构造 Socket 在【客户端/服务端】的通信模式中,客户端需要主动构造与服务器连接的 Socket,构造方法有以下几种重载形式: Socket() Socket(InetAddress address, int port) throws UnknownHostException,IOException Socket(InetAddress address,…

    Java 2023年4月30日
    00
  • Spring Boot 教程之创建项目的三种方式

    下面是关于”Spring Boot教程之创建项目的三种方式”的攻略: 创建Spring Boot项目的三种方式 Spring Boot提供了三种方式来创建新的Spring Boot应用程序: 使用Spring Initializr 使用Spring Boot CLI 使用Spring Tool Suite 接下来我们将一一讲解这三种方式的具体步骤。 使用Sp…

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