Java递归和非递归遍历目录

转载 2018年04月15日 17:56:11


原文:https://blog.csdn.net/earbao/article/details/25982133


  1. package cn.yws.getfilepath;  
  2.   
  3. import java.io.File;  
  4. import java.util.ArrayList;  
  5. import java.util.LinkedList;  
  6. import java.util.List;  
  7. /** 
  8.  * Java递归和非递归遍历目录 
  9.  * @author Administrator 
  10.  * 
  11.  */  
  12. public class FileSystem {  
  13.   
  14.     public static void main(String[] args) {  
  15.   
  16.         long a = System.currentTimeMillis();  
  17.         List<File> resultfiles = new ArrayList<File>();  
  18.   
  19.         String[] lists = { "D:\\android\\androidNDK" };  
  20.         /* 
  21.         for (int i = 0; i < lists.length; i++) { 
  22.             File file = new File(lists[i]); 
  23.             scanDirRecursion(file, resultfiles, "java"); 
  24.         } 
  25.         for (File file : resultfiles) { 
  26.             System.out.println(file.getAbsolutePath()); 
  27.         }*/  
  28.           
  29.         for (int i = 0; i < lists.length; i++) {  
  30.             File file = new File(lists[i]);  
  31.             scanDirNoRecursion(file, resultfiles, "java");  
  32.         }  
  33.         for (File file : resultfiles) {  
  34.             System.out.println(file.getAbsolutePath());  
  35.         }  
  36.   
  37.         System.out.print("文件总数:" + resultfiles.size());  
  38.         System.out.print("总耗时:");  
  39.         System.out.println((System.currentTimeMillis() - a) + "ms");  
  40.         System.out.println((System.currentTimeMillis() - a) / 1000 + "s");  
  41.     }  
  42.   
  43.     /** 
  44.      * 非递归遍历目录 
  45.      *  
  46.      * @param file 
  47.      *            文件目录 
  48.      * @param resultfiles 
  49.      *            保存返回的结果集 
  50.      * @param endWith 
  51.      *            为null,则返回所有文件,不为空,则返回所匹配的文件 
  52.      */  
  53.     public static void scanDirNoRecursion(File dir, List<File> resultfiles,  
  54.             String endWith) {  
  55.         LinkedList<File> list = new LinkedList<File>();  
  56.         File file[] = dir.listFiles();  
  57.         for (int i = 0; i < file.length; i++) {  
  58.             if (file[i].isDirectory())  
  59.                 list.add(file[i]);  
  60.             else {  
  61.                 // System.out.println(file[i].getAbsolutePath());  
  62.                 if (file[i].getName().toLowerCase().endsWith(endWith.toLowerCase())) {  
  63.                     resultfiles.add(file[i]);  
  64.                 }  
  65.             }  
  66.         }  
  67.         File tmp;  
  68.         while (!list.isEmpty()) {  
  69.             tmp = list.removeFirst();// 首个目录  
  70.             if (tmp.isDirectory()) {  
  71.                 file = tmp.listFiles();  
  72.                 if (file == null)  
  73.                     continue;  
  74.                 for (int i = 0; i < file.length; i++) {  
  75.                     if (file[i].isDirectory())  
  76.                         list.add(file[i]);// 目录则加入目录列表,关键  
  77.                     else {  
  78.                         // System.out.println(file[i]);  
  79.                         if (endWith != null) {  
  80.                             if (file[i].getName().toLowerCase().endsWith(endWith.toLowerCase()))  
  81.                                 resultfiles.add(file[i]);  
  82.                         } else {  
  83.                             resultfiles.add(file[i]);  
  84.                         }  
  85.                     }  
  86.                 }  
  87.             } else {  
  88.                 // System.out.println(tmp);  
  89.                 if (endWith != null) {  
  90.                     if (tmp.getName().toLowerCase().endsWith(endWith.toLowerCase()))  
  91.                         resultfiles.add(tmp);  
  92.                 } else {  
  93.                     resultfiles.add(tmp);  
  94.                 }  
  95.             }  
  96.         }  
  97.     }  
  98.   
  99.     /** 
  100.      * 递归遍历目录 
  101.      *  
  102.      * @param file 
  103.      *            文件目录 
  104.      * @param resultfiles 
  105.      *            保存返回的结果集 
  106.      * @param endWith 
  107.      *            为null,则返回所有文件,不为空,则返回所匹配的文件 
  108.      */  
  109.     public static void scanDirRecursion(File file, List<File> resultfiles,  
  110.             String endWith) {  
  111.         try {  
  112.             if (file.canRead()) {  
  113.                 if (file.isDirectory()) {  
  114.                     String[] files = file.list();  
  115.                     if (files != null) {  
  116.                         for (int i = 0; i < files.length; i++) {  
  117.                             scanDirRecursion(new File(file, files[i]),  
  118.                                     resultfiles, endWith);  
  119.                         }  
  120.                     }  
  121.                 } else {  
  122.                     // System.out.println(file);  
  123.                     if (endWith != null) {  
  124.                         if (file.getName().toLowerCase().endsWith(endWith.toLowerCase()))  
  125.                             resultfiles.add(file);  
  126.                     } else {  
  127.                         resultfiles.add(file);  
  128.                     }  
  129.                 }  
  130.             }  
  131.         } catch (Exception e) {  
  132.             e.printStackTrace();  
  133.         }  
  134.     }  
  135.   
  136. }

递归与非递归 遍历文件目录

import java.io.File; import java.util.LinkedList; /* * 采用非递归方式遍历目录及其子目录的文件 */ public class Proc...
  • jjwwmlp456
  • jjwwmlp456
  • 2014-08-05 19:36:44
  • 1453

C# 递归遍历目录与非递归遍历目录

C#实现递归遍历目录与非递归遍历目录,代码如下:  ///         /// 递归遍历         ///         ///         ///        ...
  • u011872945
  • u011872945
  • 2015-05-19 18:41:46
  • 822

Java实现快速排序递归和非递归

/** * 快速排序 * */ public class QuickSort{ /** * 递归一 * */ public static void sort1(int[] arr...
  • mwb1219
  • mwb1219
  • 2016-04-27 18:22:52
  • 717

快速排序 的原理及其java实现(递归与非递归)

快速排序 的原理及其java实现(递归与非递归)
  • mine_song
  • mine_song
  • 2017-03-20 09:25:49
  • 732

归并排序 递归版和非递归版的实现(java)

基于最近笔试遇到听多次 归并排序,今天做了如下总结(有递归版和非递归版的) 实现思路:将待排序的序列分为若干个,每次两两合并,然后再把有序子序列合并为整体有序序列。 递归排序合并的思路 1)初始化...
  • gdutxiaoxu
  • gdutxiaoxu
  • 2016-05-01 22:57:04
  • 1831

快速排序Java源码(递归和非递归)

package com.side.quicksort; import com.side.tests.Stack;//作者自己定义的栈类 public class QuickSort { /**...
  • bnuside
  • bnuside
  • 2011-10-26 12:52:39
  • 5115

java实现递归快排和非递归快排

package sort; import java.util.Random; public class QuickSort { public static Random random = new...
  • chenzhichao
  • chenzhichao
  • 2016-05-28 18:23:46
  • 796

java使用递归,非递归方式实现二叉树的三种常见遍历方式

二叉树的定义: 二叉树(binary tree)是结点的有限集合,这个集合或者空,或者由一个根及两个互不相交的称为这个根的左子树或右子树构成. 从定义可以看出,二叉树包括:1.空树 2.只有一...
  • lr131425
  • lr131425
  • 2017-03-07 10:48:46
  • 3278

归并排序的递归与非递归实现Java

public static int[] sort(int[] nums, int low, int high) { int mid = (low + high) / 2; ...
  • lll1204019292
  • lll1204019292
  • 2016-08-28 16:20:33
  • 631

java堆排序非递归代码,无原理版,比较好理解

public class HeapOperate { /* * 建立堆时只需要保证根结点小于两个子结点或者大于两个子结点,对两个子结点大小没有要求 */ public static vo...
  • zhuqiuhui
  • zhuqiuhui
  • 2016-04-21 23:01:59
  • 898
收藏助手
不良信息举报
您举报文章:Java递归和非递归遍历目录
举报原因:
原因补充:

(最多只允许输入30个字)