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线程中的ThreadLocal详细分析

    Java线程中的ThreadLocal详细分析

    这篇文章主要介绍了Java线程中的ThreadLocal详细分析,ThreadLocal 提供线程的局部变量,每个线程都可以通过 get()和 set()对局部变量进行操作而不会对其他线程的局部变量产生影响,实现了线程之间的数据隔离,需要的朋友可以参考下
    2023-09-09
  • Java字符串与正则表达式操作方法详解

    Java字符串与正则表达式操作方法详解

    在Java编程中正则表达式是一个强大的工具,用于处理字符串和进行模式匹配,这篇文章主要介绍了Java字符串与正则表达式操作的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-09-09
  • Windows 10上JDK环境安装配置图文教程

    Windows 10上JDK环境安装配置图文教程

    这篇文章主要为大家详细介绍了Windows 10上JDK环境安装配置图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • maven私服搭建与使用教程

    maven私服搭建与使用教程

    在使用maven进行Java项目的开发过程中,难免会有些公共的私有库,这些库是不太方便放到中央仓库的,可以通过Nexus搭建一个私有仓库,这篇文章主要介绍了maven私服搭建与使用,需要的朋友可以参考下
    2023-03-03
  • 利用Mybatis向PostgreSQL中插入并查询JSON字段

    利用Mybatis向PostgreSQL中插入并查询JSON字段

    这篇文章主要介绍了利用Mybatis向PostgreSQL中插入并查询JSON字段,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • Java 开发中 for和Stream用法对比分析

    Java 开发中 for和Stream用法对比分析

    本文介绍了for循环和Stream在Java编程中的使用场景和区别,for循环适用于简单的遍历、中途退出、操作索引等场景,而Stream适用于多步骤数据处理、复杂逻辑、并行计算等场景,下面通过例子给大家详细讲解,感兴趣的朋友一起看看吧
    2026-03-03
  • Java SE求解汉诺塔问题的示例代码

    Java SE求解汉诺塔问题的示例代码

    汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。本文将用Java SE求解这一问题,感兴趣的可以学习一下
    2022-03-03
  • java条件语句示例详解

    java条件语句示例详解

    本文给大家介绍java条件语句,Java 中的条件语句允许程序根据条件的不同执行不同的代码块,一个 if 语句包含一个布尔表达式和一条或多条语句,本文结合示例代码给大家讲解的非常详细,需要的朋友可以参考下
    2023-05-05
  • 关于SpingMVC的<context:component-scan>包扫描踩坑记录

    关于SpingMVC的<context:component-scan>包扫描踩坑记录

    这篇文章主要介绍了关于SpingMVC的<context:component-scan>包扫描踩坑记录,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • MyBatis延迟加载实现步骤详解

    MyBatis延迟加载实现步骤详解

    这篇文章主要介绍了MyBatis延迟加载实现步骤详解,​ MyBatis中的延迟加载,也成为懒加载,是指在进行关联查询时,按照设置的延迟规则推迟对关联对象的查询,延迟加载可以有效的减少数据库的压力,需要的朋友可以参考下
    2023-10-10

最新评论