java如何读取文件目录返回树形结构

 更新时间:2024年01月22日 09:09:35   作者:小栋哟  
这篇文章主要介绍了java如何读取文件目录返回树形结构问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

java读取文件目录返回树形结构

为实现读取文件目录下的文件信息,生成树形结构,以方便前端做一些展示

1.结构实体类

package cn.cnic.instdb.model.system;
 
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
 
/**
* @Auther  wdd
* @Date  2021/9/9 18:58
* @Desc  文件结构信息
*/
@Data
@Document(collection = "resource_file_tree")
public class ResourceFileTree {
    @Id
    private String id;
    private int treeId;
    private int pid;
    private String resourcesId;
    private String fileName;
    private String filePath;
    private Long size;
    private Boolean isFile;
    private boolean expanded = false;
}

2.读取文件目录工具类

package cn.cnic.instdb.utils;
 
import cn.cnic.instdb.model.system.ResourceFileTree;
import org.apache.commons.lang3.StringUtils;
 
import java.io.File;
import java.util.*;
 
/**
 * @author wdd
 * @version 1.0
 * @date 2021/11/29 14:57
 */
public class FileTree {
    //用于储存找到的每一个文件
    List<ResourceFileTree> node=new LinkedList();
 
    /**
     * 读取文件目录返回树形结构
     * @param path 文件路径
     * @param id 每条记录的id
     * @param pid 父id
     * @param resourcesId 数据资源的id
     * @param fileFilter 过滤掉某个命名的文件
     * @return
     */
    private  List<ResourceFileTree> getFile(String path, int id, int pid, String resourcesId,String fileFilter) {
        File file = new File(path);
        if(file.exists()) {
            File[] array = file.listFiles();
            List fileList = Arrays.asList(array);
            //对读到的本地文件夹进行排序
            Collections.sort(fileList, new Comparator<File>() {
                @Override
                public int compare(File o1, File o2) {
                    if (o1.isDirectory() && o2.isFile()){
                        return -1;
                    }
                    if (o1.isFile() && o2.isDirectory()){
                        return 1;
                    }
                    return o1.getName().compareTo(o2.getName());
                }
            });
 
            for (int i = 0; i < array.length; i++) {
                ResourceFileTree resourceFileTree = new ResourceFileTree();
                //过滤文件
                if(StringUtils.isNotBlank(fileFilter) && fileFilter.equals(array[i].getName())){
                    continue;
                }
                resourceFileTree.setResourcesId(resourcesId);
                resourceFileTree.setPid(pid);
                resourceFileTree.setTreeId(id);
                resourceFileTree.setFilePath(array[i].getPath());
                resourceFileTree.setFileName(array[i].getName());
                resourceFileTree.setIsFile(array[i].isFile());
                resourceFileTree.setExpanded(false);
                //判断是否为文件夹,是的话进行递归
                if (array[i].isDirectory()) {
                    node.add(resourceFileTree);
                    //进行递归,此时的pid为上一级的id
                    getFile(array[i].getPath(), id * 10 + 1 + i, id,resourcesId,fileFilter);
                    id++;
                } else {
                    resourceFileTree.setSize(array[i].length());
                    node.add(resourceFileTree);
                    id++;
                }
            }
        }
        return node;
    }
    public List<ResourceFileTree> getFileTree(String resourcesId, String path,String fileFilter) {
        node.removeAll(node);
        FileTree counter = new FileTree();
        int level=0;
        List<ResourceFileTree> file = counter.getFile(path, 1, level,resourcesId,fileFilter);
        return file;
    }
 
 
    public static void main(String[] args) {
        FileTree counter = new FileTree();
        List<ResourceFileTree> fileResourceFileTree = counter.getFileTree("5asd5as6d8asdas4dqw873e4", "D:\\wdd_work\\学习资料","neo4j图库安装文档.doc");
 
        System.out.println(fileResourceFileTree.size());
        System.out.println(fileResourceFileTree);
    }
 
 
}

总结

就这么简单,亲测已经成功使用中~

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • idea打开运行配置java web项目的全过程

    idea打开运行配置java web项目的全过程

    这篇文章主要给大家介绍了关于idea打开运行配置java web项目的相关资料,有些时候我们用IDEA跑之前用eclipse中运行的项目的时候,总是不止所措,要不就是只展示html,要不就是不能部署成功,需要的朋友可以参考下
    2023-08-08
  • Java实现加密传输与匿名化的实战指南

    Java实现加密传输与匿名化的实战指南

    随着智慧交通系统的普及,交通数据已成为城市大脑的“血液”,然而,这些数据中包含的车牌号、位置坐标、出行时间等敏感信息,若未妥善保护,可能引发一系列风险,所以本文将通过 Java 实现加密传输与匿名化的实战,需要的朋友可以参考下
    2025-09-09
  • SpringBoot整合SpringDataJPA

    SpringBoot整合SpringDataJPA

    这篇文章主要介绍了SpringBoot整合SpringDataJPA代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-07-07
  • java 加密之RSA算法加密与解密的实例详解

    java 加密之RSA算法加密与解密的实例详解

    这篇文章主要介绍了java 加密之RSA算法加解密与解密的实例详解的相关资料,需要的朋友可以参考下
    2017-07-07
  • Java excel数据导入mysql的实现示例详解

    Java excel数据导入mysql的实现示例详解

    今天教大家如何使用Java将excel数据导入MySQL,文中有非常详细的代码示例,对正在学习java的小伙伴呢很有帮助,需要的朋友可以参考下
    2022-08-08
  • SpringBoot项目中连接Gauss数据库

    SpringBoot项目中连接Gauss数据库

    本文主要介绍了SpringBoot项目中连接Gauss数据库,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06
  • java实现猜数字小游戏

    java实现猜数字小游戏

    这篇文章主要为大家详细介绍了java实现猜数字小游戏,随机给定一个数字,直到猜对大小,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • Java实现鼠标拖拽移动界面组件

    Java实现鼠标拖拽移动界面组件

    在Java中,Frame或者JFrame自身已经实现了鼠标拖拽标题栏移动窗口的功能。但是Jframe的样式实在无法令人满意,那你又该怎么实现鼠标拖拽移动窗口的目的呢?今天我们来探讨下
    2014-09-09
  • spring mvc路径匹配原则详解

    spring mvc路径匹配原则详解

    这篇文章主要介绍了spring mvc路径匹配原则详解,小编觉得还是挺不错的,这里分享给大家,需要的朋友可以参考下,下面就和小编一起来看看吧
    2018-02-02
  • java 中clone()的使用方法

    java 中clone()的使用方法

    这篇文章主要介绍了java 中clone()的使用方法的相关资料,希望通过本文能帮助大家能掌握clone()的克隆方法,需要的朋友可以参考下
    2017-09-09

最新评论