java递归与非递归实现扫描文件夹下文件的实例代码

  • 更新时间:2020-05-01 09:43:41
  • 编辑:权阳嘉

java扫描指定文件夹下面的所有文件,供大家参考,具体内容如下

扫描一个文件夹下面的所有文件,因为文件夹的层数没有限制可能多达几十层几百层,通常会采用两种方式来遍历指定文件夹下面的所有文件。

  • 递归方式
  • 非递归方式(采用队列或者栈实现)

下面我就给出两种方式的实现代码,包括了递归与非递归实现,code如下所示。

java代码:

package q.test.filescanner; 
 
import java.io.File; 
import java.util.ArrayList; 
import java.util.LinkedList; 
 
import q.test.filescanner.exception.ScanFilesException; 
 
/** 
 * @author 邪恶小先生 
 */ 
public class FolderFileScanner { 
   
  private static ArrayList<Object> scanFiles = new ArrayList<Object>(); 
   
  /**linkedList实现**/ 
  private static LinkedList<File> queueFiles = new LinkedList<File>(); 
   
   
  /** 
   * TODO:递归扫描指定文件夹下面的指定文件 
   * @return ArrayList<Object> 
   * @author 邪恶小先生(LQ) 
   * @time 2017年11月3日 
   */ 
  public static ArrayList<Object> scanFilesWithRecursion(String folderPath) throws ScanFilesException{ 
    ArrayList<String> dirctorys = new ArrayList<String>(); 
    File directory = new File(folderPath); 
    if(!directory.isDirectory()){ 
      throw new ScanFilesException('"' + folderPath + '"' + " input path is not a Directory , please input the right path of the Directory. ^_^...^_^"); 
    } 
    if(directory.isDirectory()){ 
      File [] filelist = directory.listFiles(); 
      for(int i = 0; i < filelist.length; i ++){ 
        /**如果当前是文件夹,进入递归扫描文件夹**/ 
        if(filelist[i].isDirectory()){ 
          dirctorys.add(filelist[i].getAbsolutePath()); 
          /**递归扫描下面的文件夹**/ 
          scanFilesWithRecursion(filelist[i].getAbsolutePath()); 
        } 
        /**非文件夹**/ 
        else{ 
          scanFiles.add(filelist[i].getAbsolutePath()); 
        } 
      } 
    } 
    return scanFiles; 
  } 
   
  /** 
   * 
   * TODO:非递归方式扫描指定文件夹下面的所有文件 
   * @return ArrayList<Object> 
   * @param folderPath 需要进行文件扫描的文件夹路径 
   * @author 邪恶小先生(LQ) 
   * @time 2017年11月3日 
   */ 
  public static ArrayList<Object> scanFilesWithNoRecursion(String folderPath) throws ScanFilesException{ 
    File directory = new File(folderPath); 
    if(!directory.isDirectory()){ 
      throw new ScanFilesException('"' + folderPath + '"' + " input path is not a Directory , please input the right path of the Directory. ^_^...^_^"); 
    } 
    else{ 
      //首先将第一层目录扫描一遍 
      File [] files = directory.listFiles(); 
      //遍历扫出的文件数组,如果是文件夹,将其放入到linkedList中稍后处理 
      for(int i = 0; i < files.length; i ++){ 
        if(files[i].isDirectory()){ 
          queueFiles.add(files[i]); 
        }else{ 
          //暂时将文件名放入scanFiles中 
          scanFiles.add(files[i].getAbsolutePath()); 
        } 
      } 
       
      //如果linkedList非空遍历linkedList 
      while(!queueFiles.isEmpty()){ 
        //移出linkedList中的第一个 
        File headDirectory = queueFiles.removeFirst(); 
        File [] currentFiles = headDirectory.listFiles(); 
        for(int j = 0; j < currentFiles.length; j ++){ 
          if(currentFiles[j].isDirectory()){ 
            //如果仍然是文件夹,将其放入linkedList中 
            queueFiles.add(currentFiles[j]); 
          }else{ 
            scanFiles.add(currentFiles[j].getAbsolutePath()); 
          } 
        } 
      } 
    } 
     
    return scanFiles; 
  } 
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。

相关教程

  • 解析Java实现二叉树前序建树,前中后递归非递归遍历及层序遍历

    这篇文章主要介绍了Java实现的二叉树常用操作,包括二叉树的前序建树,前中后递归非递归遍历及层序遍历等相关操作技巧,需要的朋友可以参考下

    发布时间:2020-03-16

  • 介绍javascript中递归函数的小注意

    这篇文章主要针对javascript中递归函数用法注意点做介绍,有需要小伙伴可以来学习下

    发布时间:2020-03-14

  • Javascript迭代、递推、穷举、递归常用算法分享

    今天小编就为大家分享一篇关于Javascript迭代、递推、穷举、递归常用算法实例讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    发布时间:2020-03-21

  • 菜鸟成长之路:Java程序员职场全攻略

    菜鸟成长之路:Java程序员职场全攻略

    《菜鸟成长之路:Java程序员职场全攻略》 内容简介:以包罗万象的IT这个大江湖为背景,将Java职场中从入门前的学校菜鸟到成长为技术大牛的过程展现给读者,内容饱满但又不失趣味性。在《

    大小:51.4 MBJava职场电子书

  • Head First JavaScript程序设计

    Head First JavaScript程序设计

    大小:71.2 MBJavaScript电子书

  • Java Web云应用开发项目式教程

    Java Web云应用开发项目式教程

    《 JavaWeb云应用开发项目式教程 /云计算技术与运用专业校企合作系列产品教材》为云计算技术与运用专业校企合作教材。 《JavaWeb云应用开发项目式教程/云计算技术与应用专业校企合作系列教

    大小:209 MBJava Web电子书

  • 码出高效:Java开发手册

    码出高效:Java开发手册

    引爆技术圈,全球瞩目的中国计算机民族图书,中国人自己原创的Java编程规范,希望未来社会发展的每一行代码都规范、合理、高效,马云、行癫、鲁肃亲笔推荐!

    大小:207.9 MBJava编程电子书

  • 精通JavaScript

    精通JavaScript

    精通JavaScript(第2版) 是iQuery之父的经典之作,是深入学习JavaScript技术的绝佳教材,涵盖了可重用代码、文档对象模型、Ajax、Web生产工具、AngularJS等内容。作者讲解了JavaScript的发展现状、实用技

    大小:33.5 MBJavaScript电子书

  • Effective Java中文版(第3版)

    Effective Java中文版(第3版)

    Java之父James Gosling鼎力推荐、Jolt获奖作品全新升级,针对Java 7、8、9全面更新,Java程序员必备参考书。包含大量完整的示例代码和透彻的技术分析,通过90条经验法则,探索新的设计模式和语言

    大小:197.6 MBjava电子书

  • Java高并发编程详解:多线程与架构设计

    Java高并发编程详解:多线程与架构设计

    《Java高并发编程详解》立足于线程源码剖析,从基础入手,逐层渐进深入,环环紧扣,针对技术细节进行了细致归纳,在解读源码的时候又引入了优秀的架构设计。

    大小:120.77 MBJava编程电子书

  • JavaScript高级程序设计

    JavaScript高级程序设计

    《 JavaScript高級编程设计(第3版) 》是JavaScript超級畅销书的*版。ECMAScript5和HTML5在规范之战中同时获胜,使很多特有保持和手机客户端拓展宣布进到标准,另外也为JavaScript增加了许多融入发展方

    大小:23 MBJS程序设计电子书

  • Java从小白到大牛(含源码)

    Java从小白到大牛(含源码)

    Java从小白到大牛是一本Java语言学习教程,读者群是零基础小白,通过本书的学习能够成为Java大牛。主要内容包括:Java语法基础、数据类型、运算符、控制语句、数组、字符串、面向对象基础、继承与多态、抽象类与接口、集合框架、异常处理、输入输出和网络编程等技术。

    大小:15.6 MBJava电子书

  • Java Web应用详解

    Java Web应用详解

    这本书以网络留言板开发为主线将JavaWeb知识融会贯通,知识模块完整,通过静态网页篇、动态网站篇、系统框架篇、项目实战篇循序渐进地使学生全面掌握JavaWeb开发技术,欢迎下载

    大小:74.2 MBJava Web电子书

用户留言