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程序员职场全攻略》 内容简介:以包罗万象的IT这个大江湖为背景,将Java职场中从入门前的学校菜鸟到成长为技术大牛的过程展现给读者,内容饱满但又不失趣味性。在《
大小:51.4 MBJava职场电子书
-
Head First JavaScript程序设计
大小:71.2 MBJavaScript电子书
-
Java Web云应用开发项目式教程
《 JavaWeb云应用开发项目式教程 /云计算技术与运用专业校企合作系列产品教材》为云计算技术与运用专业校企合作教材。 《JavaWeb云应用开发项目式教程/云计算技术与应用专业校企合作系列教
大小:209 MBJava Web电子书
-
码出高效:Java开发手册
引爆技术圈,全球瞩目的中国计算机民族图书,中国人自己原创的Java编程规范,希望未来社会发展的每一行代码都规范、合理、高效,马云、行癫、鲁肃亲笔推荐!
大小:207.9 MBJava编程电子书
-
精通JavaScript
精通JavaScript(第2版) 是iQuery之父的经典之作,是深入学习JavaScript技术的绝佳教材,涵盖了可重用代码、文档对象模型、Ajax、Web生产工具、AngularJS等内容。作者讲解了JavaScript的发展现状、实用技
大小:33.5 MBJavaScript电子书
-
Effective Java中文版(第3版)
Java之父James Gosling鼎力推荐、Jolt获奖作品全新升级,针对Java 7、8、9全面更新,Java程序员必备参考书。包含大量完整的示例代码和透彻的技术分析,通过90条经验法则,探索新的设计模式和语言
大小:197.6 MBjava电子书
-
Java高并发编程详解:多线程与架构设计
《Java高并发编程详解》立足于线程源码剖析,从基础入手,逐层渐进深入,环环紧扣,针对技术细节进行了细致归纳,在解读源码的时候又引入了优秀的架构设计。
大小:120.77 MBJava编程电子书
-
JavaScript高级程序设计
《 JavaScript高級编程设计(第3版) 》是JavaScript超級畅销书的*版。ECMAScript5和HTML5在规范之战中同时获胜,使很多特有保持和手机客户端拓展宣布进到标准,另外也为JavaScript增加了许多融入发展方
大小:23 MBJS程序设计电子书
-
Java从小白到大牛(含源码)
Java从小白到大牛是一本Java语言学习教程,读者群是零基础小白,通过本书的学习能够成为Java大牛。主要内容包括:Java语法基础、数据类型、运算符、控制语句、数组、字符串、面向对象基础、继承与多态、抽象类与接口、集合框架、异常处理、输入输出和网络编程等技术。
大小:15.6 MBJava电子书
-
Java Web应用详解
这本书以网络留言板开发为主线将JavaWeb知识融会贯通,知识模块完整,通过静态网页篇、动态网站篇、系统框架篇、项目实战篇循序渐进地使学生全面掌握JavaWeb开发技术,欢迎下载
大小:74.2 MBJava Web电子书