当前位置:首页 > 编程教程 > java技术文章 > java递归与非递归实现扫描文件夹下所有文件

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

  • 发布时间:
  • 作者:码农之家
  • 点击:187

这篇文章主要知识点是关于java、递归、非递归、扫描文件、的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

Web前端开发精品课 JavaScript基础教程
  • 类型:前端大小:9.7 MB格式:PDF作者:莫振杰
立即下载

java递归与非递归实现扫描文件夹下所有文件

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实现二叉树前序建树,前中后递归非递归遍历及层序遍历
  • 本文实例讲述了Java实现的二叉树常用操作。分享给大家供大家参考,具体如下: import java.util.ArrayDeque;import java.util.Queue;import java.util.Stack;//二叉树的建树,前中后 递归非递归遍历 层序遍历//Node节点class Node { int element; Node left; Node right; public Node() { } public Node(int element) { this.element = element; }}// BinaryTreepublic class Tree { // creat tree from array public static Node creatTree(int[] data, int i) { if (i = data……

  • 介绍javascript中递归函数的小注意
  • 不做详细文字说明了,直接写代码,很明了。 script function sum(num){ if(num=1){return 1;}else{return num*sum(num-1);//return num*arguments.callee(num-1); //指针//return 2;}}var sum1=sum; alert(sum1(2));/script 上面的代码 在执行时很容易出现问题,执行我们介绍一个方法,arguments.callee,是一个指向正在执行的函数的指针,使用指针代替函数名使得执行以上代码时不容易出错! 以上代码就是javascript中递归函数用法……

  • Javascript迭代、递推、穷举、递归常用算法分享
  • 累加和累积 累加:将一系列的数据加到一个变量里面。最后的得到累加的结果 比如:将1到100的数求累加和 小球从高处落下,每次返回到原来一半,求第十次小球落地时小球走过的路程 script var h=100; var s=0; for(var i=0;i10;i++){ h=h/2; s+=h; } s=s*2+100;/script 累积:将一系列的数据乘积到一个变量里面,得到累积的结果。 常见的就是n的阶乘 var n=100;var result= 1;for(var i=1;i=n;i++){ result*=i;} 一般……

    java 相关电子书
    学习笔记

    Copyright 2018-2020 xz577.com 码农之家

    本站所有电子书资源不再提供下载地址,只分享来路

    版权投诉 / 书籍推广 / 赞助:QQ:520161757