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

网友投稿 355 2023-02-18


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 scanFiles = new ArrayList();

/**linkedList实现**/

private static LinkedList queueFiles = new LinkedList();

/**

* TODO:递归扫描指定文件夹下面的指定文件

* @return ArrayList

* @author 邪恶小先生(LQ)

* @time 2017年11月3日

*/

public static ArrayList scanFilesWithRecursion(String folderPath) throws ScanFilesException{

ArrayList dirctorys = new ArrayList();

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

* @param folderPath 需要进行文件扫描的文件夹路径

* @author 邪恶小先生(LQ)

* @time 2017年11月3日

*/

public static ArrayList scanFilesWithNoRecursion(String folderPath) throws ScanFilesException{

File directory = new File(folderPath);

ymlfeRH 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.liymlfeRHstFiles();

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;

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:在线文档api接口(在线接口对接文档)
下一篇:Struts2下拉框实例解析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~