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

Java判斷磁盤空間和分區(qū)表是否需要清理

 更新時(shí)間:2025年07月29日 09:12:14   作者:yuanzhengme  
這篇文章主要為大家詳細(xì)介紹了如何使用Java編寫一個(gè)工具類,可以判斷磁盤空間和分區(qū)表是否需要清理,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

1.依賴

        <!--hutool工具箱-->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.6.6</version>
        </dependency>

2.核心代碼

根據(jù)路徑獲取磁盤空間數(shù)據(jù)

  /**
     * 根據(jù)路徑獲取磁盤空間數(shù)據(jù)
     *
     * @param path 路徑
     * @return 磁盤空間數(shù)據(jù)
     */
    public Map<String, Object> queryDiskSpaceDataByPath(String path) {
        File file = new File(path);
        long totalSpace = file.getTotalSpace();
        long freeSpace = file.getFreeSpace();
        long freeSpaceLong = freeSpace / 1024 / 1024 / 1024;
        long totalSpaceLong = totalSpace / 1024 / 1024 / 1024;
        double freeRate = 0.0;
        if (totalSpaceLong > 1) {
            freeRate = freeSpaceLong * 1.0 / totalSpaceLong * 100;
        }
        // 數(shù)據(jù)封裝
        Map<String, Object> diskDataMap = new HashMap<>(4);
        diskDataMap.put("path", path);
        diskDataMap.put("diskSpace", "磁盤剩余及總大小[" + freeSpaceLong + "G/" + totalSpaceLong + "G]");
        diskDataMap.put("diskUsageRate", "磁盤剩余率[" + String.format("%.2f", freeRate) + "%]");
        return diskDataMap;
    }

根據(jù)參數(shù)判斷當(dāng)前表是否需要清理分區(qū)

    /**
     * 根據(jù)參數(shù)判斷當(dāng)前表是否需要清理分區(qū)
     *
     * @param partitionDataMap 表的分區(qū)信息
     * @param retentionYears   存儲(chǔ)年限
     * @return 包含判斷結(jié)果的表分區(qū)信息
     */
    public boolean toDetermineIfTableNeedsToBeClearedUp(Map<String, Object> partitionDataMap, int retentionYears) {
        String partitionType = MapUtils.getString(partitionDataMap, "partitionType");
        String partitionMin = MapUtils.getString(partitionDataMap, "partitionMin");
        // 根據(jù)type獲取差值
        long differenceValue = getDateDifferenceValueByParam(partitionType, partitionMin);
        boolean isToBe = determineIfTableNeedsToBeClearedUp(partitionType, differenceValue, retentionYears);
        partitionDataMap.put("isToClearedUp", isToBe);
        return isToBe;
    }

根據(jù)參數(shù)獲取差值【跟當(dāng)前年月】

    /**
     * 根據(jù)參數(shù)獲取差值
     *
     * @param type 類型 year month day
     * @param min  最小分區(qū)值【最早分區(qū)】
     * @return 差值
     */
    private long getDateDifferenceValueByParam(String type, String min) {
        long differenceValue = 0;
        switch (type) {
            case "year":
                differenceValue = DateUtil.betweenYear(new Date(), DateUtil.parse(min, "yyyy"), false);
                break;
            case "month":
                differenceValue = DateUtil.betweenMonth(new Date(), DateUtil.parse(min, "yyyyMM"), false);
                break;
            case "day":
                differenceValue = DateUtil.betweenDay(new Date(), DateUtil.parse(min, "yyyyMMdd"), false);
                break;
            default:
                break;
        }
        return differenceValue;
    }

根據(jù)參數(shù)判斷大小【判斷差值是否大于0】

    /**
     * 根據(jù)參數(shù)判斷大小
     *
     * @param type            類型 year month day
     * @param differenceValue 差值
     * @param retentionYears  比對(duì)值
     * @return 是否大于
     */
    private boolean determineIfTableNeedsToBeClearedUp(String type, long differenceValue, int retentionYears) {
        boolean isToBe = false;
        switch (type) {
            case "year":
                isToBe = differenceValue > retentionYears;
                break;
            case "month":
                isToBe = differenceValue > (retentionYears * 12);
                break;
            case "day":
                isToBe = differenceValue > (retentionYears * 365);
                break;
            default:
                break;
        }
        return isToBe;
    }

獲取需要調(diào)整開始時(shí)間的分區(qū)【臨界分區(qū)】

    /**
     * 獲取需要調(diào)整開始時(shí)間的分區(qū)
     *
     * @param partitionDataMap 表的分區(qū)信息
     * @param retentionYears   存儲(chǔ)年限
     * @return 調(diào)整開始時(shí)間的分區(qū)
     */
    public String getAdjustmentPartitionName(Map<String, Object> partitionDataMap, int retentionYears) {
        // 解析參數(shù)
        String partitionType = MapUtils.getString(partitionDataMap, "partitionType");
        String partitionPrefix = MapUtils.getString(partitionDataMap, "partitionPrefix");
        String partitionMax = MapUtils.getString(partitionDataMap, "partitionMax");
        // 獲取需要調(diào)整的分區(qū)名稱
        String adjustmentPartition = getAdjustmentPartitionName(partitionType, partitionMax, retentionYears);
        return partitionPrefix + adjustmentPartition;
    }

生成要清理的分區(qū)列表【需要?jiǎng)h除的分區(qū)不包含臨界分區(qū)】

    /**
     * 生成要清理的分區(qū)列表
     *
     * @param partitionDataMap 表的分區(qū)信息
     * @param retentionYears   存儲(chǔ)年限
     * @return 要清理的分區(qū)列表
     */
    public List<String> getClearedUpPartitionTableNames(Map<String, Object> partitionDataMap, int retentionYears) {
        // 解析參數(shù)
        String partitionType = MapUtils.getString(partitionDataMap, "partitionType");
        String partitionMin = MapUtils.getString(partitionDataMap, "partitionMin");
        String partitionMax = MapUtils.getString(partitionDataMap, "partitionMax");
        // 獲取需要調(diào)整的分區(qū)名稱
        String adjustmentPartition = getAdjustmentPartitionName(partitionType, partitionMax, retentionYears);
        // 生成清理分區(qū)列表
        return getClearedUpListByParam(partitionType, adjustmentPartition, partitionMin);
    }

根據(jù)參數(shù)獲取調(diào)整分區(qū)名稱(調(diào)整分區(qū)的開始時(shí)間)

    /**
     * 根據(jù)參數(shù)獲取調(diào)整分區(qū)名稱(調(diào)整分區(qū)的開始時(shí)間)
     *
     * @param type           分區(qū)類型 year month day
     * @param partitionMax   最大分區(qū)
     * @param retentionYears 存儲(chǔ)年限
     * @return 需要調(diào)整的分區(qū)名稱
     */
    private String getAdjustmentPartitionName(String type, String partitionMax, int retentionYears) {
        String adjustPartitionName = "";
        switch (type) {
            case "year":
                adjustPartitionName = DateUtil.format(DateUtil.offsetDay(DateUtil.parse(partitionMax, "yyyy"), -365 * retentionYears), "yyyy");
                break;
            case "month":
                adjustPartitionName = DateUtil.format(DateUtil.offsetDay(DateUtil.parse(partitionMax, "yyyyMM"), -365 * retentionYears), "yyyyMM");
                break;
            case "day":
                adjustPartitionName = DateUtil.format(DateUtil.offsetDay(DateUtil.parse(partitionMax, "yyyyMMdd"), -365 * retentionYears), "yyyyMMdd");
                break;
            default:
                break;
        }
        return adjustPartitionName;
    }

根據(jù)參數(shù)獲取區(qū)間分區(qū)表名稱

    /**
     * 根據(jù)參數(shù)獲取區(qū)間分區(qū)表名稱
     *
     * @param type         扶你去類型 year month day
     * @param partitionMax 最大分區(qū)值
     * @param partitionMin 最小分區(qū)值
     * @return 區(qū)間分區(qū)表名稱列表
     */
    private List<String> getClearedUpListByParam(String type, String partitionMax, String partitionMin) {
        List<String> clearedUpList = new ArrayList<>();
        switch (type) {
            case "year":
                LocalDateTime startYear = LocalDateTime.of(Integer.parseInt(partitionMin), 1, 1, 0, 0);
                LocalDateTime endYear = LocalDateTime.of(Integer.parseInt(partitionMax), 1, 1, 0, 0);
                long numOfYearsBetween = ChronoUnit.YEARS.between(startYear, endYear) - 1;
                if (numOfYearsBetween >= 0) {
                    for (long i = 0; i <= numOfYearsBetween; i++) {
                        clearedUpList.add("p_year_" + DateUtil.format(startYear.plusYears(i), "yyyy"));
                    }
                }
                break;
            case "month":
                LocalDateTime startMonth = LocalDateTime.of(Integer.parseInt(partitionMin.substring(0, 4)), Integer.parseInt(partitionMin.substring(4)), 1, 0, 0);
                LocalDateTime endMonth = LocalDateTime.of(Integer.parseInt(partitionMax.substring(0, 4)), Integer.parseInt(partitionMax.substring(4)), 1, 0, 0);
                long numOfMonthsBetween = ChronoUnit.MONTHS.between(startMonth, endMonth) - 1;
                if (numOfMonthsBetween >= 0) {
                    for (long i = 0; i <= numOfMonthsBetween; i++) {
                        clearedUpList.add("p_month_" + DateUtil.format(startMonth.plusMonths(i), "yyyyMM"));
                    }
                }
                break;
            case "day":
                LocalDateTime startDay = LocalDateTime.of(Integer.parseInt(partitionMin.substring(0, 4)), Integer.parseInt(partitionMin.substring(4, 6)), Integer.parseInt(partitionMin.substring(6)), 0, 0);
                LocalDateTime endDay = LocalDateTime.of(Integer.parseInt(partitionMax.substring(0, 4)), Integer.parseInt(partitionMax.substring(4, 6)), Integer.parseInt(partitionMax.substring(6)), 0, 0);
                long numOfDaysBetween = ChronoUnit.DAYS.between(startDay, endDay) - 1;
                if (numOfDaysBetween >= 0) {
                    for (long i = 0; i <= numOfDaysBetween; i++) {
                        clearedUpList.add("p_day_" + DateUtil.format(startDay.plusDays(i), "yyyyMMdd"));
                    }
                }
                break;
            default:
                break;
        }
        return clearedUpList;
    }

3.用到的核心類

java.time.temporal.ChronoUnit【這個(gè)類之前用的很少】

cn.hutool.core.date.DateUtil【hutool工具箱的時(shí)間工具】

到此這篇關(guān)于Java判斷磁盤空間和分區(qū)表是否需要清理的文章就介紹到這了,更多相關(guān)Java獲取磁盤空間和分區(qū)表內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java使用WatchService監(jiān)控文件內(nèi)容變化的示例

    Java使用WatchService監(jiān)控文件內(nèi)容變化的示例

    本篇文章主要介紹了Java使用WatchService監(jiān)控文件變化的示例,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-10-10
  • Java高級(jí)之虛擬機(jī)加載機(jī)制的實(shí)例講解

    Java高級(jí)之虛擬機(jī)加載機(jī)制的實(shí)例講解

    下面小編就為大家分享一篇Java高級(jí)之虛擬機(jī)加載機(jī)制的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • 基數(shù)排序簡介及Java語言實(shí)現(xiàn)

    基數(shù)排序簡介及Java語言實(shí)現(xiàn)

    這篇文章主要介紹了基數(shù)排序簡介及Java語言實(shí)現(xiàn),涉及基數(shù)排序的基本思想簡單介紹和桶排序的分析,以及基數(shù)排序的Java實(shí)現(xiàn),具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-11-11
  • Java設(shè)計(jì)模式中的抽象工廠模式解讀

    Java設(shè)計(jì)模式中的抽象工廠模式解讀

    這篇文章主要介紹了Java設(shè)計(jì)模式中的抽象工廠模式解讀,抽象工廠模式為創(chuàng)建一組相關(guān)或相互依賴的對(duì)象提供一個(gè)接口,而且無需指定他們的具體類,需要的朋友可以參考下
    2023-11-11
  • Java根據(jù)ip地址獲取歸屬地實(shí)例詳解

    Java根據(jù)ip地址獲取歸屬地實(shí)例詳解

    這篇文章主要為大家介紹了Java根據(jù)ip地址獲取歸屬地實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 如何開發(fā)基于Netty的HTTP/HTTPS應(yīng)用程序

    如何開發(fā)基于Netty的HTTP/HTTPS應(yīng)用程序

    HTTP/HTTPS是最常見的協(xié)議套件之一,并且隨著智能手機(jī)的成功,它的應(yīng)用也日益廣泛,因?yàn)閷?duì)于任何公司來說,擁有一個(gè)可以被移動(dòng)設(shè)備訪問的網(wǎng)站幾乎是必須的。下面就來看看如何開發(fā)基于Netty的HTTP/HTTPS應(yīng)用程序
    2021-06-06
  • IDEA中項(xiàng)目集成git提交代碼的詳細(xì)步驟

    IDEA中項(xiàng)目集成git提交代碼的詳細(xì)步驟

    這篇文章主要介紹了IDEA中項(xiàng)目集成git提交代碼的詳細(xì)步驟,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Java Bigdecimal使用原理詳解

    Java Bigdecimal使用原理詳解

    這篇文章主要介紹了Java Bigdecimal使用原理詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • MapStruct Plus的使用教程

    MapStruct Plus的使用教程

    MapStruct和MapStructPlus是Java類型映射的工具,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • 如何通過properties文件配置web.xml中的參數(shù)

    如何通過properties文件配置web.xml中的參數(shù)

    這篇文章主要介紹了如何通過properties文件配置web.xml中的參數(shù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評(píng)論

文成县| 萨嘎县| 朝阳区| 冷水江市| 三都| 五家渠市| 乃东县| 合水县| 奎屯市| 交口县| 诸城市| 安庆市| 青阳县| 梁山县| 平湖市| 洛扎县| 延寿县| 辽阳市| 二连浩特市| 镇宁| 新田县| 玉环县| 读书| 邓州市| 读书| 宜州市| 玉田县| 资中县| 成武县| 定西市| 哈尔滨市| 柳州市| 玉田县| 常熟市| 江门市| 康乐县| 昌图县| 南靖县| 长宁县| 贡觉县| 阳城县|