Java非递归的方式获取目录中所有文件(包括目录)

零、思路解析

对于给出的文件查看其下面的所有目录,将这个目录下的所有目录放入待遍历的目录集合中,每次取出该集合中的目录遍历,如果是目录再次放入该目录中进行遍历。

一、代码

    /**
     * 非递归的方式获取目录中的所有文件<br>
     * 此方法获取的路径未按照目录->文件方式排列
     *
     * @param dirPath 目录路径
     * @return 指定目录下所有文件和目录的集合
     */
    public static List<File> listAllFile(String dirPath) {
        LinkedList<File> allFiles = new LinkedList<>();
        if ("".equals(dirPath) || null == dirPath) {
            return allFiles;
        }
        File file = new File(dirPath);
        allFiles.add(file);//添加自己
        if (file.isFile()) {
            return allFiles;
        }

        File[] fileList = file.listFiles();
        if (fileList == null || fileList.length == 0) {
            return allFiles;
        }
        //将第一次获取到的文件和目录放入总集合中
        allFiles.addAll(Arrays.asList(fileList));

        //声明存放目录的集合
        LinkedList<File> dirCheckList = new LinkedList<>();
        //处理第一层目录

        for (File curFile : fileList) {
            if (curFile.isDirectory()) {
                dirCheckList.add(curFile);
            }
        }

        while (!dirCheckList.isEmpty()) {
            File removeDir = dirCheckList.removeFirst();//移除首位的目录
            File[] removeDirFileList = removeDir.listFiles();
            if (removeDirFileList == null) {
                continue;
            }
            //将找出的所有的文件和目录加入到总集合中
            allFiles.addAll(Arrays.asList(removeDirFileList));
            for (File curFile : removeDirFileList) {
                if (curFile.isDirectory()) {
                    dirCheckList.add(curFile);
                }
            }
        }
        return allFiles;
    }
时间: 2024-12-25 06:16:56

Java非递归的方式获取目录中所有文件(包括目录)的相关文章

gradle 删除指定目录中的文件和目录

// 删除bakAPk下的所有非母包文件 task deleTask(type: Delete){ FileTree tree = fileTree(dir: bakPath) tree.each {File file -> if(!file.toString().contains(oldFileName)){ delete file } } } deleTask // 删除bakAPk目录下的所有非母包的目录和文件 task clearBacApkDir(type: Delete) { fil

二叉树基本操作续二:前序、中序、后序遍历(非递归 迭代方式)

这里给出二叉树三种遍历方式的迭代实现代码.二叉树的递归实现使用系统栈入栈出栈,而非递归的迭代实现方法就是手动维护一个栈,来模拟递归的入栈出栈过程. 本文没有给出用户栈的代码,如果需要结合上篇的测试代码一起测试,则需要自己实现自己的栈,以及基本的pop.push等栈操作函数. 前序迭代遍历: 1 void iter_preorder(tree_pointer ptr) 2 { 3 //前序遍历:先遍历根节点,然后再分别遍历左右子树 4 int top = -1; 5 tree_pointer st

二叉树的广度优先遍历、深度优先遍历的递归和非递归实现方式

二叉树的遍历方式: 1.深度优先:递归,非递归实现方式 1)先序遍历:先访问根节点,再依次访问左子树和右子树 2)中序遍历:先访问左子树,再访问根节点吗,最后访问右子树 3)后序遍历:先访问左子树,再访问右子树,最后访问根节点 2.广度优先     按照树的深度,一层一层的访问树的节点 1 package Solution; 2 3 import java.util.LinkedList; 4 import java.util.Queue; 5 import java.util.Stack; 6

Java学习-040-级联删除目录中的文件、目录

之前在写应用模块,进行单元测试编码的时候,居然脑洞大开居然创建了一个 N 层的目录,到后来删除测试结果目录的时候,才发现删除不了了,提示目录过长无法删除.网上找了一些方法,也找了一些粉碎机,都没能达到想要的结果,我就简写了一个小应用,用于删除自己脑洞大开创建的级联目录.此小应用没有代码注释,也没有进行容错处理,请大家知悉!哈哈哈哈哈.....若发现有错误,也请告知,我会去修改订正,非常感谢! 闲话少述,直接上码了! 1 /** 2 * Aaron.ffp Inc. 3 * Copyright (

Java非递归遍历树算法---以遍历文件为例

在网上看到的算法,跟之前自己写的一个非遍历算法类似,先记录下来. 非递归: import java.io.File; import java.util.LinkedList; public class FileSystem { public static void main(String[] args) { long a = System.currentTimeMillis(); LinkedList list = new LinkedList(); File dir = new File("c

java非递归检索文件夹下所有文件的代码

把开发过程比较重要的一些内容段做个珍藏,下面的内容段是关于java非递归检索文件夹下所有文件的内容,应该是对大家有所帮助. DateFormat df = DateFormat.getDateTimeInstance();LinkedList<File> folders = new LinkedList<File>();LinkedList<File> filelists = new LinkedList<File>();File dir = new Fil

Java中移动文件或目录的方法盘点

本文不再更新,可能存在内容过时的情况,实时更新请移步原文地址:Java中移动文件或目录的方法盘点: import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; public class M

File类之在指定目录中查找文件

1 package IoDemo; 2 3 import java.io.File; 4 5 /** 6 * @Title:FileDemo2 7 * @Description:在指定的目录中查找文件 8 * @author Crazy-ZJ 9 * @data 2017年9月21日下午5:45:24 10 * @book 疯狂java讲义(第三版): 11 */ 12 public class FileDemo2 { 13 public static void main(String[] ar

详解-vue项目中的文件和目录

可以用vue-cli来支持一个项目. 建议使用npm 3+更高效的依赖关系树: $ npm install -g vue-cli $ vue init webpack my-project $ cd my-project $ npm install $ npm run dev 项目结构: . ├── build/ # webpack配置文件 │ └── ... ├── config/ │ ├── index.js # 主要项目配置 │ └── ... ├── src/ │ ├── main.js