java中扫描指定文件夹下面的所有文件

扫描一个文件夹下面的所有文件,因为文件夹的层数没有限制可能多达几十层几百层,通常会采用两种方式来遍历指定文件夹下面的所有文件。

递归方式

非递归方式(采用队列或者栈实现)

下面我就给出两种方式的实现代码,包括了递归与非递归实现,code如下所示。

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);

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扫描文件夹下面的所有文件(递归与非递归实现)相关推荐

  1. java web文件夹_JAVA WEB项目文件夹上传下载解决方案

    这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数 下面直接贴代码吧,一些难懂的我大部分都加上注释了: 上传文件实体类: 看得 ...

  2. java 扫描jar包_java 扫描指定包(包括jar包)

    /*未经本人同意,禁止转载. 做工程时,有时候需要扫描指定包,或者指定jar包,甚至扫描指定包下指定类,本文章详细讲解如何扫描,以及智能扫描,小编讲的很详细了仔细看. 以下讲解, 包扫描和jar包扫描 ...

  3. java 删除文件失败_java中File的delete()方法删除文件失败的原因

    一般来说 java file.delete失败 有以下几个原因 1.看看是否被别的进程引用,手工删除试试(删除不了就是被别的进程占用) 2.file是文件夹 并且不为空,有别的文件夹或文件, 3.极有 ...

  4. java linux创建文件夹_java web工程在linux下创建文件夹和文件

    具体的创建方法参照下面的实例: public class FileTest { public static void main(String[] args) { // 根据系统的实际情况选择目录分隔符 ...

  5. java 获取ftp 文件路径_java在浏览器上获取FTP读文件路径

    展开全部 问一下,你是62616964757a686964616fe4b893e5b19e31333337623437想做ftp上传下载么? 首先你需要安装一个ftp服务端程序,启动起来,然后下载一个 ...

  6. 另一个.java文件调用_java - 如何调用另一个类“写文件”的方法? - SO中文参考 - www.soinside.com...

    在我的Android应用程序,我想有一类处理所有"写入/读取到文本文件"的行动.所以,我根本就调用我的readUserFile.java文件我想的方法.但我的方法将不会在该文件中工 ...

  7. java导出pdf 含图片_java 生成PDF含图片和中文件实现代码

    1,所需包 iText.jar iTextAsian.ar(支持中包) 2,列子 package com.pdf; import java.awt.Color; import java.io.File ...

  8. java io流文件损坏_java使用io流下载.docx. xlsx文件,出现文件损坏提示

    介绍 在使用io流下载服务器上的资源文件时,出现以下提示:但是选择"是"后文件可以正常打开 参考 代码如下: [codesyntax lang="java"] ...

  9. java http上传文件到_java使用http往服务器上传文件(图片)

    使用http往服务端上传文件,要使用MultipartEntity,需要引入httpmime包,在附件中. class="java">public static String ...

最新文章

  1. 论坛报名 | 人工智能与疫情精准防控
  2. SQL临时表的生存期问题
  3. 【Groovy】编译时元编程 ( ASTTransformation#visit 方法获取 Groovy 源文件 )
  4. 干货 | 懂点儿经济学有什么用?
  5. CSS进阶(十)position:relative
  6. Kinect1和Kinect2的区别
  7. visual studio 删除附加项
  8. linux percpu机制解析
  9. 【报告分享】 2020-2021年数字内容产业趋势报告-企鹅智库 (附下载)
  10. JavaScript实现的转盘抽奖html页面前端源码
  11. JAVA方法3-方法的重载
  12. HMAC-MD5签名的Java实现
  13. 国网铅封电表红外通讯采集器是干什么用的?一分钟搞懂
  14. 第27次CCF-CSP计算机软件能力认证(2022-09-18)
  15. Linux常用bash命令
  16. Visual Studio(VS)的各个版本下载及安装
  17. oracle 导出数据 utl,oracle 使用 UTL_FILE 导出表数据到txt文件
  18. stm32Cubemx实用篇(三):DAC电压输出和ADC电压检测以及内部温度传感器测温
  19. 车站计算机系统具有自诊断功能,第五节自动检售票系统.ppt
  20. 深入理解Linux多线程

热门文章

  1. 图数据结构,以及使用递归方式实现图的深度优先和广度优先遍历
  2. c语言如何让窗口无法关闭,无法关闭窗口的程序
  3. windows登录linux xceed,Xceed Zip for ActiveX
  4. 精诚MES智能制造公司在数字化制造中发挥核心作用
  5. 腾讯QQ2014最新版官方正式版下载
  6. set.stream使用 java_深入浅出Java8中parallelStream的使用
  7. 【ALGO】100盏灯问题
  8. 维基解秘的兄弟网站Cryptome.org
  9. redis watchdog_Redis分布式事务框架Redisson源码解析(一)
  10. 什么是netty--通俗易懂