• 【Java入门每日一练】使用DFS深度优先遍历文件夹


    九层之台,起于垒土,你我皆是垒土人✔
    愿我的文章对你有所帮助!
    欢迎===关注===点赞===评论,共同学习,共同进步!

     

    目录

    一、DFS深度优先算法

    二、DFS实例:对文件夹的遍历

    1、首先编写FileTree类

    2、编写FileToTree类实现算法

     1、实现代码:

     2、输出方法实现

     3、输出结果

    三、完整实现代码:


    一、DFS深度优先算法

    DFS即DEPTH FIRST SERVE,即从树的根节点开始遍历,从其中一个子节点开始持续向下遍历每一个节点,直至到叶子节点则返回上一级,最后回到根节点下的子节点继续往复遍历。

      如下图:

    一个树图

     根据DFS算法则遍历顺序为:1>2>5>10>6>3>7>4>8>9

    二、DFS实例:对文件夹的遍历

       通过对于某个文件夹进行遍历,并且全部输出文件夹名称以及文件名,如果是文件夹则为true,否则为false,需要用到递归来实现,即当遍历的文件夹为空时返回,实现自己调用自己。

    1、首先编写FileTree类

    方便对于后续的文件的遍历,不懂的可以看注释!

    或者私信我哦!!

    1. package FileTree_Test;
    2. import java.util.List;
    3. public class FileTree {
    4. private List children;
    5. private String filename;
    6. private Boolean IsDirectory;
    7. public Boolean getIsDirectory()
    8. {
    9. return IsDirectory;
    10. }//获取存储是否是文件夹结果
    11. public void setIsDirectory(Boolean Judge)
    12. {
    13. this.IsDirectory=Judge;
    14. }//存储是否是文件夹的结果
    15. public FileTree(String filename){
    16. this.filename=filename;
    17. }
    18. public String getFilename() {
    19. return filename;
    20. }//获取文件名
    21. public void setFilename(String filename) {
    22. this.filename = filename;
    23. }
    24. public List getChildren() {
    25. return children;
    26. }//存储文件夹的子文件
    27. public void setChildren(List children) {
    28. this.children = children;
    29. }//设为子文件列表
    30. public void addchild(FileTree fileTree){
    31. children.add(fileTree);
    32. }//添加子文件
    33. public boolean islast(){
    34. return children==null;
    35. }//是否是最后的叶子节点(文件)
    36. }

    2、编写FileToTree类实现算法

    • 需要用到的方法:
    • File. listFiles() //存储该文件下所有子文件
    • File.isDirectory() //判断是否为文件夹

     实现思路:首先遍历根文件,判断是否是文件夹,如果是就使用一个File数组来存储通过listFiles方法获取的文件,然后再遍历File数组中的子文件夹,并且再加上根目录路径,再添加到此级的子文件数组中,最后使用遍历完成。

      输出则是一级一级的遍历输出

     1、实现代码:

    1. public static void FileToTree_DFS(FileTree root){//DFS
    2. File rootfile=new File(root.getFilename());
    3. if(!rootfile.isDirectory()){//不是文件夹设为false
    4. root.setIsDirectory(false);
    5. return;
    6. }else{
    7. root.setIsDirectory(true);
    8. File []children=rootfile.listFiles();//将根目录下的子文件顺序放置在一个文件数组中
    9. for(File child:children){
    10. FileTree childtree=new FileTree(root.getFilename()+"\\"+child.getName());
    11. if(root.getChildren()==null)
    12. root.setChildren(new ArrayList());
    13. root.addchild(childtree);//将Line18的匿名孩子对象添加到根目录的孩子中
    14. FileToTree_DFS(childtree);//递归
    15. }
    16. }
    17. }

     2、输出方法实现

    1. public static void printfFile(FileTree fileTree){
    2. List list = fileTree.getChildren();
    3. if (fileTree.islast())
    4. {
    5. // 空语句
    6. }
    7. else {//不为空则继续遍历
    8. System.out.println(fileTree.getFilename()+" "+fileTree.getIsDirectory());
    9. for (FileTree FileTree : list) {
    10. System.out.println(FileTree.getFilename()+" "+FileTree.getIsDirectory());
    11. }
    12. System.out.println("======================================");
    13. for (FileTree FileTree : list) {
    14. printfFile(FileTree);
    15. }
    16. }
    17. }

     3、输出结果

     

     

    三、完整实现代码:

    Tips:需要另先创建FileTree类!

    1. import java.util.List;
    2. import java.io.File;
    3. import java.util.ArrayList;
    4. public class FileTo_Tree {
    5. public static void FileToTree_DFS(FileTree root){//DFS
    6. File rootfile=new File(root.getFilename());
    7. if(!rootfile.isDirectory()){//不是文件夹设为false
    8. root.setIsDirectory(false);
    9. return;
    10. }else{
    11. root.setIsDirectory(true);
    12. File []children=rootfile.listFiles();//将根目录下的子文件顺序放置在一个文件数组中
    13. for(File child:children){
    14. FileTree childtree=new FileTree(root.getFilename()+"\\"+child.getName());
    15. if(root.getChildren()==null)
    16. root.setChildren(new ArrayList());
    17. root.addchild(childtree);//将Line18的匿名孩子对象添加到根目录的孩子中
    18. FileToTree_DFS(childtree);//递归
    19. }
    20. }
    21. }
    22. public static void printfFile(FileTree fileTree){
    23. List list = fileTree.getChildren();
    24. if (fileTree.islast())
    25. {
    26. // 空语句
    27. }
    28. else {//不为空则继续遍历
    29. System.out.println(fileTree.getFilename()+" "+fileTree.getIsDirectory());
    30. for (FileTree FileTree : list) {
    31. System.out.println(FileTree.getFilename()+" "+FileTree.getIsDirectory());
    32. }
    33. System.out.println("======================================");
    34. for (FileTree FileTree : list) {
    35. printfFile(FileTree);
    36. }
    37. }
    38. }
    39. public static void main(String[] args) {
    40. FileTree root=new FileTree("D:\\RootFile");
    41. //FileToTree_DFS(root);
    42. FileToTree_BFS(root);
    43. printfFile(root);
    44. }
    45. }

     

    发文不易,恳请大佬们高抬贵手!


    点赞:随手点赞是种美德,是大佬们对于本人创作的认可!


    评论:往来无白丁,是你我交流的的开始!


    收藏:愿君多采撷,是大佬们对在下的赞赏!

  • 相关阅读:
    前馈型BP神经网络
    电脑那个部件坏了或者是哪个软件需要修复来看价钱
    软考-信息安全工程师-下午题常考
    【Servlet】Servlet API 详解
    java技术专家面试指南50问【java学习+面试宝典】(六)
    webpack构建工具面试题
    创信短信API的无代码开发集成:电商平台、CRM和用户运营
    supervisor的使用
    vector类的常用接口说明
    MyBatis 递归案例
  • 原文地址:https://blog.csdn.net/m0_55278347/article/details/127677537