最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現(xiàn)遞歸刪除菜單和目錄及目錄下所有文件

 更新時間:2025年03月04日 10:19:56   作者:Javaの甘乃迪  
這篇文章主要為大家詳細介紹了Java如何實現(xiàn)遞歸刪除菜單和刪除目錄及目錄下所有文件,文中的示例代碼講解詳細,感興趣的小伙伴可以參考一下

一、什么是遞歸

遞歸調(diào)用是一種特殊的嵌套調(diào)用,是某個函數(shù)調(diào)用自己或者是調(diào)用其他函數(shù)后再次調(diào)用自己的,只要函數(shù)之間互相調(diào)用能產(chǎn)生循環(huán)的則一定是遞歸調(diào)用,遞歸調(diào)用一種解決方案,一種是邏輯思想,將一個大工作分為逐漸減小的小工作,比如說一個和尚要搬50塊石頭,他想,只要先搬走49塊,那剩下的一塊就能搬完了,然后考慮那49塊,只要先搬走48塊,那剩下的一塊就能搬完了,遞歸是一種思想,只不過在程序中,就是依靠函數(shù)嵌套這個特性來實現(xiàn)了。

遞歸調(diào)用就是在當前的函數(shù)中調(diào)用當前的函數(shù)并傳給相應(yīng)的參數(shù),這是一個動作,這一動作是層層進行的,直到滿足一般情況的的時候,才停止遞歸調(diào)用,開始從最后一個遞歸調(diào)用返回。

二、示例分析

案例1:遞歸刪除菜單及其所有子菜單

菜單實體類

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
 
import java.io.Serializable;
import java.util.Date;
 
/**
 * 系統(tǒng)菜單
 */
@Data
@TableName(value = "menu")
public class Menu implements Serializable {
 
    private static final long serialVersionUID = 1L;
 
    /*** 菜單ID*/
    @TableId(type = IdType.INPUT)
    private Long menuId;
 
    /*** 父級菜單ID*/
    private Long upMenuId;
 
    /*** 菜單編碼*/
    private String menuCode;
 
    /*** 菜單名稱*/
    private String menuName;
 
    /*** 菜單級別(默認1級)*/
    private Integer menuLevel;
 
    /*** 菜單頁面打開方式(1-本頁面打開 2 新標簽頁打開 3-新窗口打開)*/
    private Integer pageOpenType;
 
    /*** 菜單類型(1-菜單 2-權(quán)限按鈕)*/
    private Integer menuType;
 
    /*** 菜單圖標*/
    private String menuIcon;
 
    /*** 菜單URL*/
    private String menuUrl;
 
    /*** 菜單序號*/
    private Integer menuOrder;
 
    /*** 菜單描述*/
    private String menuDesc;
 
    /*** 數(shù)據(jù)狀態(tài)(0-刪除 1-正常) */
    private Integer dataFlag;
 
    /*** 是否禁用(0-否 1-是)*/
    private Integer isDisable;
 
    /*** 創(chuàng)建人ID*/
    private Long createId;
 
    /*** 創(chuàng)建時間*/
    private Date createTime;
 
}

實現(xiàn)代碼

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.test.java.domain.entity.Menu;
import com.test.java.mapper.MenuMapper;
import com.test.java.service.MenuService;
import org.springframework.util.CollectionUtils;
 
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
 
public class MenuServiceImpl implements MenuService {
 
    @Resource
    private MenuMapper menuMapper;
 
    @Override
    public Integer deleteMenuById(Long menuId) {
        // 校驗當前要刪除的菜單是否存在
        Menu menu = menuMapper.selectById(menuId);
        if (null == menu) {
            throw new RuntimeException("菜單已刪除");
        }
 
        // 創(chuàng)建list集合,用于封裝所有要刪除的菜單ID
        List<Long> menuIdList = new ArrayList<>();
        // 向menuIdList集合設(shè)置刪除菜單id(根據(jù)id刪除菜單)
        this.queryMenuChildById(menuId, menuIdList);
        // 把當前菜單id封裝到idList里面
        menuIdList.add(menuId);
 
        // 批量刪除當前菜單 及其所有子菜單
        return menuMapper.deleteBatchIds(menuIdList);
    }
 
 
    // 根據(jù)當前菜單id,查詢其所有子菜單id,再封裝到idList集合
    private void queryMenuChildById(Long menuId, List<Long> idList) {
        // 查詢菜單里面子菜單id
        QueryWrapper<Menu> wrapper = new QueryWrapper<>();
        wrapper.eq("up_menu_id", menuId);
        List<Menu> childMenuList = menuMapper.selectList(wrapper);
        if (!CollectionUtils.isEmpty(childMenuList)) {
            // 把childMenuList里面菜單id值獲取出來,封裝idList里面,做遞歸查詢
            childMenuList.forEach(item -> {
                //封裝idList里面
                idList.add(item.getMenuId());
                //遞歸查詢
                this.queryMenuChildById(item.getMenuId(), idList);
            });
        }
    }
 
}

案例2:遞歸刪除目錄及其目錄中所有文件

實現(xiàn)代碼

import lombok.extern.slf4j.Slf4j;
 
import java.io.File;
 
/**
 * 文件相關(guān)工具類
 */
@Slf4j
public class FileUtils {
 
    /**
     * 刪除文件或文件夾
     *
     * @param path 文件路徑
     * @return 返回true(刪除成功), 返回false(刪除失敗)
     */
    public static boolean deleteFileOrDirectory(String path) {
        File file = new File(path);
        // 判斷文件是否存在
        if (file.exists()) {
            // 判斷是否為文件
            if (file.isFile()) {
                // 刪除文件
                return deleteFile(path);
            } else {
                // 刪除文件夾
                return deleteDirectory(path);
            }
        } else {
            return false;
        }
    }
 
    /**
     * 刪除文件
     *
     * @param path 文件路徑
     * @return 返回true(刪除成功), 返回false(刪除失敗)
     */
    public static boolean deleteFile(String path) {
 
        boolean result = false;
 
        File file = new File(path);
        if (file.isFile() && file.exists()) {
            result = file.delete();
            log.info("刪除文件成功:{}", path);
            return result;
        } else {
            log.info("刪除文件失?。簕}", path);
            return result;
        }
    }
 
    /**
     * 刪除文件夾(先刪文件再刪目錄)
     *
     * @param path 文件夾路徑
     * @return 返回true(刪除成功), 返回false(刪除失敗/文件夾不存在)
     */
    public static boolean deleteDirectory(String path) {
        if (!path.endsWith(File.separator)) {
            // 補齊文件分隔符
            path = path + File.separator;
        }
        File directoryFile = new File(path);
        // 文件不存在、不是一個目錄就打印退出返回false
        if (!directoryFile.exists() || !directoryFile.isDirectory()) {
            log.info("文件夾不存在,{}", path);
            return false;
        }
 
        boolean flag = true;
        // 獲取所有的子文件及子文件夾
        File[] files = directoryFile.listFiles();
        if (files != null) {
            // 循環(huán)刪除
            for (File file : files) {
                // 刪除子文件
                if (file.isFile()) {
                    flag = deleteFile(file.getAbsolutePath());
                    if (!flag) {
                        break;
                    }
                } else {// 刪除子文件夾
                    flag = deleteDirectory(file.getAbsolutePath());
                    if (!flag) {
                        break;
                    }
                }
            }
        }
        if (!flag) {
            log.info("刪除文件夾失敗");
            return false;
        }
        // 最后刪除當前文件夾
        if (directoryFile.delete()) {
            log.info("刪除文件夾成功,{}", path);
            return true;
        } else {
            log.info("刪除文件夾失敗,{}", path);
            return false;
        }
    }
 
}

到此這篇關(guān)于Java實現(xiàn)遞歸刪除菜單和目錄及目錄下所有文件的文章就介紹到這了,更多相關(guān)Java遞歸刪除文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一問詳解SpringBoot配置文件優(yōu)先級

    一問詳解SpringBoot配置文件優(yōu)先級

    在SpringBoot項目當中,我們要想配置一個屬性,可以通過這三種方式當中的任意一種來配置都可以,那么優(yōu)先級怎么算,本文主要介紹了一問詳解SpringBoot配置文件優(yōu)先級,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 一篇文章詳解Java異常處理

    一篇文章詳解Java異常處理

    異常處理是編程語言或計算機硬件里的一種機制,用于處理軟件或信息系統(tǒng)中出現(xiàn)的異常狀況(即超出程序正常執(zhí)行流程的某些特殊條件),這篇文章主要給大家介紹了關(guān)于Java異常處理的相關(guān)資料,需要的朋友可以參考下
    2023-12-12
  • Spring Cloud應(yīng)用實現(xiàn)配置自動刷新過程詳解

    Spring Cloud應(yīng)用實現(xiàn)配置自動刷新過程詳解

    這篇文章主要介紹了Spring Cloud應(yīng)用實現(xiàn)配置自動刷新過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • SpringBoot2 整合MinIO中間件實現(xiàn)文件便捷管理功能

    SpringBoot2 整合MinIO中間件實現(xiàn)文件便捷管理功能

    這篇文章主要介紹了SpringBoot2 整合MinIO中間件,實現(xiàn)文件便捷管理,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • 簡單談?wù)凾hreadPoolExecutor線程池之submit方法

    簡單談?wù)凾hreadPoolExecutor線程池之submit方法

    下面小編就為大家?guī)硪黄唵握務(wù)凾hreadPoolExecutor線程池之submit方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • Spring注解與P/C命名空間超詳細解析

    Spring注解與P/C命名空間超詳細解析

    Spring注解方式減少了配置文件內(nèi)容,更加便于管理,并且使用注解可以大大提高了開發(fā)效率!注解本身是沒有功能的,和xml一樣,注解和xml都是一種元數(shù)據(jù),元數(shù)據(jù)即解釋數(shù)據(jù)的數(shù)據(jù),也就是所謂的配置
    2022-11-11
  • SpringBoot中的@Conditional?注解的使用

    SpringBoot中的@Conditional?注解的使用

    @Conditional是Spring4新提供的注解,它的作用是按照一定的條件進行判斷,滿足條件的才給容器注冊Bean,本文主要介紹了SpringBoot中的@Conditional?注解的使用
    2024-01-01
  • 一文教會你用mybatis查詢數(shù)據(jù)庫數(shù)據(jù)

    一文教會你用mybatis查詢數(shù)據(jù)庫數(shù)據(jù)

    MyBatis本身是一個數(shù)據(jù)庫連接框架,可以認為是JDBC的升級版,下面這篇文章主要給大家介紹了關(guān)于mybatis查詢數(shù)據(jù)庫數(shù)據(jù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04
  • 簡介Java的Spring框架的體系結(jié)構(gòu)以及安裝配置

    簡介Java的Spring框架的體系結(jié)構(gòu)以及安裝配置

    這篇文章主要介紹了Java的Spring框架的體系結(jié)構(gòu)以及安裝配置,Spring框架是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下
    2015-12-12
  • Spring Boot CLI安裝教程

    Spring Boot CLI安裝教程

    Spring Boot是一個命令行工具,用于使用Spring進行快速原型搭建。本文重點給大家介紹Spring Boot CLI安裝教程,感興趣的朋友參考下吧
    2017-08-08

最新評論

肥城市| 西昌市| 尉犁县| 黔江区| 得荣县| 枣阳市| 石渠县| 阳东县| 博白县| 思南县| 图木舒克市| 盱眙县| 延寿县| 吉木萨尔县| 元朗区| 巩义市| 手游| 绥棱县| 南宫市| 宜宾县| 双辽市| 略阳县| 江都市| 南江县| 淄博市| 渭源县| 成安县| 资溪县| 大邑县| 伊通| 南汇区| 湛江市| 平安县| 河南省| 郴州市| 南投市| 顺义区| 鄂伦春自治旗| 乌鲁木齐市| 彰武县| 淳安县|