Java目录树的创建与获取

 更新时间:2024年03月31日 09:06:54   作者:Java中的战斗机  
在Java开发中,经常会涉及到生成目录树的需求,本文主要介绍了Java目录树的创建与获取,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧

在Java开发中,经常会涉及到生成目录树的需求,目录树是一种树状结构,用于表示文件系统中的目录和文件之间的层次关系。下面就来介绍一下Java目录树的创建与获取,具体如下:

逻辑代码

    /**
     * @描述 应用目录树添加
     * @作者 梁伟浩
     * @日期 2024/3/29 15:30
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public R saveApplyContent(ApplyDirContentRequest request) {
        BiProjectDir projectDir = new BiProjectDir();
        BeanUtil.copyProperties(request, projectDir);
        projectDir.setCreateUser(request.getUserId());
        projectDir.setCreateTime(new Date());
        projectDir.setUpdateUser(request.getUserId());
        projectDir.setUpdateTime(new Date());
        // 参数没传父级ID,则进入方法查询是否有父级目录,有则取其ID作为父ID无则创建根节点配置
        if (ObjectUtil.isEmpty(request.getParentId())) {
            BiProjectDir rootContent = this.getRootContent(request.getProjectId());
            //获取父级ID
            projectDir.setParentId(rootContent.getId());
        }
        biProjectDirMapper.insert(projectDir);
        return R.data(projectDir);
    }


    private BiProjectDir getRootContent(Long projectId) {
      //查出同一项目下的所有目录与文件
        BiProjectDir rootContent = biProjectDirMapper.selectOne(new LambdaQueryWrapper<BiProjectDir>().eq(BiProjectDir::getProjectId,projectId).eq(BiProjectDir::getName,"根节点配置"));
        if (rootContent == null) {
            // 如果没有根节点配置,则自动新建根节点配置
            rootContent = new BiProjectDir();
            rootContent.setName("根节点配置");
            rootContent.setProjectId(projectId);
            rootContent.setSort(1);
            biProjectDirMapper.insert(rootContent);
        }
        return rootContent;
    }

    /**
     * @param projectId 项目ID
     * @描述 获取应用目录树
     * @作者 梁伟浩
     * @日期 2024/3/30 14:20 星期六
     */
    @Override
    public R<List<ApplyContentResponse>> getApplyContent(Long projectId) {
        List<BiProjectDir> biProjectDirs = biProjectDirMapper.selectList(new LambdaQueryWrapper<BiProjectDir>().eq(BiProjectDir::getProjectId, projectId));
        if (!biProjectDirs.isEmpty()){
            //构建目录树
            List<ApplyContentResponse> list = ListTreeUtil.build(biProjectDirs, "id", "parentId", null, ApplyContentResponse.class, Comparator.comparing(ApplyContentResponse::getSort));
            System.out.println(list);
            return R.data(list);
        }
        return null;
    }

实体

package com.guodi.bi.dmp.entiy;

import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import java.util.Date;

import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

/**
 * 项目专题目录图层表
 */
@Data
@ApiModel(value = "项目专题目录图层表", description = "项目专题目录图层表")
@TableName("bi_project_dir")
public class BiProjectDir {
    /**
     * 主键ID
     */
    @ApiModelProperty(value = "主键ID")
    private Long id;

    /**
     * 名称
     */
    @ApiModelProperty(value = "名称")
    private String name;

    /**
     * 上级ID
     */
    @ApiModelProperty(value = "上级ID")
    private Long parentId;


    /**
     * 备注
     */
    @ApiModelProperty(value = "备注")
    private String remark;

    /**
     * 目录/图层(1.目录,2图层)
     */
    @ApiModelProperty(value = "目录/图层(1.目录,2图层)")
    private Integer type;

    /**
     * 显示顺序
     */
    @ApiModelProperty(value = "显示顺序")
    private Integer sort;

    /**
     * 项目ID
     */
    @ApiModelProperty(value = "项目ID")
    private Long projectId;

    /**
     * 项目数据页面ID
     */
    @ApiModelProperty(value = "项目数据页面ID")
    private Long projectDataId;

    /**
     * 创建人
     */
    @ApiModelProperty(value = "创建人")
    private Long createUser;

    /**
     * 创建时间
     */
    @ApiModelProperty(value = "创建时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    /**
     * 更新人
     */
    @ApiModelProperty(value = "更新人")
    private Long updateUser;

    /**
     * 更新时间
     */
    @ApiModelProperty(value = "更新时间")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;

    /**
     * 是否已删除
     */
    @TableLogic
    @ApiModelProperty(value = "是否已删除")
    private Integer isDeleted = 0;
}

响应实体

package com.guodi.bi.dmp.vo.response;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.guodi.bi.dmp.entiy.BiProjectDir;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.List;

/**
 * @author 梁伟浩
 * @description 应用目录树返回实体
 * @date 2024/3/30 14:15
 * @study 星期六
 */
@Data
public class ApplyContentResponse  extends BiProjectDir {

    /**
     * 子孙节点
     */
    @ApiModelProperty(value = "子节点")
    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    private List<BiProjectDir> children;

}

到此这篇关于Java目录树的创建与获取的文章就介绍到这了,更多相关Java目录树创建与获取内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

您可能感兴趣的文章:

相关文章

  • 分享一些Java的常用工具

    分享一些Java的常用工具

    今天给大家带来的是关于Java的一些常用的工具,文中有非常详细的介绍,对正在学习java的小伙伴们很有帮助,需要的朋友可以参考下
    2021-06-06
  • spring boot教程之IDEA环境下的热加载与热部署

    spring boot教程之IDEA环境下的热加载与热部署

    这篇文章主要介绍了spring boot系列教程中的IDEA环境下的热加载与热部署的相关资料,需要的朋友可以参考下
    2022-09-09
  • spring boot集成WebSocket日志实时输出到web页面

    spring boot集成WebSocket日志实时输出到web页面

    这篇文章主要为大家介绍了spring boot集成WebSocket日志实时输出到web页面展示的详细操作,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03
  • SpringBoot实现MapperScan添加动态配置(占位符)

    SpringBoot实现MapperScan添加动态配置(占位符)

    这篇文章主要介绍了SpringBoot实现MapperScan添加动态配置(占位符),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教。
    2022-01-01
  • Spring Security架构以及源码详析

    Spring Security架构以及源码详析

    这篇文章主要给大家介绍了关于Spring Security架构以及源码的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-06-06
  • Java日期时间使用方法汇总

    Java日期时间使用方法汇总

    这篇文章主要针对Java日期时间使用方法进行汇总,感兴趣的朋友可以参考一下
    2016-03-03
  • java设计模式--桥接模式详解

    java设计模式--桥接模式详解

    这篇文章主要为大家详细介绍了java设计模式之桥接模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能给你带来帮助
    2021-07-07
  • Spring-AOP @AspectJ进阶之如何绑定代理对象

    Spring-AOP @AspectJ进阶之如何绑定代理对象

    这篇文章主要介绍了Spring-AOP @AspectJ进阶之如何绑定代理对象的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • 浅谈Java继承中的转型及其内存分配

    浅谈Java继承中的转型及其内存分配

    这篇文章主要介绍了浅谈Java继承中的转型及其内存分配,首先分享了简单的代码及运行结果,然后对其进行分析,继而引出了
    2017-11-11
  • 史上最简单的MyBatis动态SQL入门示例代码

    史上最简单的MyBatis动态SQL入门示例代码

    动态sql,可以根据用户对字段选择和输入,动态生成一条sql执行。接下来通过本文给大家分享MyBatis动态SQL入门示例代码,一起看看吧
    2017-03-03

最新评论