java递归与非递归实现扫描文件夹下所有文件
程序员文章站
2023-11-17 16:40:25
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; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
下一篇: springboot 错误处理小结