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

使用Java實(shí)現(xiàn)文件大小過(guò)濾功能(附源碼)

 更新時(shí)間:2025年06月27日 09:19:38   作者:Katie。  
在實(shí)際開(kāi)發(fā)中,經(jīng)常需要對(duì)大量文件進(jìn)行批量處理,對(duì)于這些場(chǎng)景,開(kāi)發(fā)者往往需要根據(jù)文件的大小進(jìn)行篩選,本文就來(lái)利用Java實(shí)現(xiàn)文件大小過(guò)濾功能,有需要的可以了解下

一、項(xiàng)目背景詳細(xì)介紹

在實(shí)際開(kāi)發(fā)中,經(jīng)常需要對(duì)大量文件進(jìn)行批量處理,如日志清理、備份管理、數(shù)據(jù)遷移等。對(duì)于這些場(chǎng)景,開(kāi)發(fā)者往往需要根據(jù)文件的大小進(jìn)行篩選:將超過(guò)指定閾值的大文件單獨(dú)歸檔,或者將過(guò)小的臨時(shí)文件刪除,以節(jié)省存儲(chǔ)空間、提升系統(tǒng)性能或增強(qiáng)數(shù)據(jù)安全性。

  • 日志管理:服務(wù)器產(chǎn)生大量日志文件,某些日志可能因?yàn)楫惓F唇踊蜓h(huán)寫(xiě)入而過(guò)大,需要及時(shí)過(guò)濾并歸檔,否則會(huì)導(dǎo)致磁盤(pán)被快速占滿(mǎn)。
  • 備份清理:定期對(duì)歷史備份文件執(zhí)行大小篩選,將超過(guò)一定大小的全量備份分批上傳至云存儲(chǔ),將小文件留在本地以便快速恢復(fù)。
  • 數(shù)據(jù)遷移:遷移時(shí)只處理小于某個(gè)大小的文件,以保證網(wǎng)絡(luò)帶寬與時(shí)間窗口可控;對(duì)大文件則分片或異步上傳。
  • 安全掃描:靜態(tài)資源或可執(zhí)行文件大小異??赡芤馕吨鴥?nèi)容被篡改或注入,通過(guò)大小過(guò)濾可初步發(fā)現(xiàn)異常文件。

因此,實(shí)現(xiàn)一個(gè)“Java 文件大小過(guò)濾”工具,能夠靈活地根據(jù)用戶(hù)指定的大小閾值,對(duì)目錄或文件列表進(jìn)行掃描、篩選與分類(lèi),具有重要的實(shí)用價(jià)值。

二、項(xiàng)目需求詳細(xì)介紹

本項(xiàng)目的目標(biāo)是設(shè)計(jì)并實(shí)現(xiàn)一個(gè)通用的 Java 文件大小過(guò)濾模塊,主要需求包括:

1.閾值條件

  • 支持“最小大小閾值”和“最大大小閾值”兩種過(guò)濾模式,用戶(hù)可單獨(dú)指定或同時(shí)指定。
  • 閾值單位支持字節(jié)(B)、千字節(jié)(KB)、兆字節(jié)(MB)、千兆字節(jié)(GB),并提供自動(dòng)換算。

2.掃描范圍

  • 支持對(duì)單個(gè)文件進(jìn)行判斷,輸出是否符合條件。
  • 支持對(duì)指定目錄進(jìn)行遞歸掃描,返回滿(mǎn)足條件的文件列表及其大小信息。
  • 支持對(duì)多條路徑(文件或目錄)進(jìn)行批量處理。

3.輸出格式

  • 提供簡(jiǎn)單的 List<File> 返回,也可定制輸出為 Map<File, Long>(文件-大小映射)。
  • 命令行工具模式下,打印文件路徑與大小,并可按大小升序或降序排序。
  • 支持將結(jié)果導(dǎo)出為 CSV、JSON 或純文本格式,便于后續(xù)集成。

4.性能與并發(fā)

  • 對(duì)大目錄進(jìn)行掃描時(shí),采用多線程并行遍歷與判斷,以提升處理速度。
  • 支持線程池配置、最大并發(fā)數(shù)限制,避免過(guò)度占用 CPU 或 I/O。

5.易用性與擴(kuò)展

對(duì)外提供靜態(tài)工具類(lèi) FileSizeFilter,方法簽名示例:

public static List<File> filterBySize(File directory, long minBytes, long maxBytes);

支持命令行執(zhí)行 java -jar filesizefilter.jar --min 10MB --max 1GB --path /data/logs。

后續(xù)可擴(kuò)展結(jié)合日期、文件類(lèi)型、名稱(chēng)模式等更多過(guò)濾條件。

6.異常與日志

  • 針對(duì)無(wú)效路徑、文件權(quán)限不足等情況進(jìn)行友好異常提示。
  • 掃描過(guò)程中對(duì)錯(cuò)誤文件記錄日志,并可選擇忽略或中斷操作。

三、相關(guān)技術(shù)詳細(xì)介紹

為滿(mǎn)足以上需求,將涉及并運(yùn)用以下核心技術(shù)與類(lèi)庫(kù):

1.Java 文件 I/O 與 NIO

  • java.io.File:舊式文件與目錄操作。
  • java.nio.file.Files、java.nio.file.Path:新 I/O API,支持流式遍歷與更高效的文件屬性讀取。
  • java.nio.file.attribute.BasicFileAttributes:獲取文件大小、最后修改時(shí)間等元數(shù)據(jù)。

2.并發(fā)與線程池

  • java.util.concurrent.ExecutorService、ForkJoinPool:管理并發(fā)任務(wù),支持目錄遞歸掃描時(shí)的分支并行。
  • CompletableFuture:實(shí)現(xiàn)異步鏈?zhǔn)教幚砼c結(jié)果合并。

3.命令行解析

  • 可選 Apache Commons CLI、Picocli、JCommander 等庫(kù),簡(jiǎn)化參數(shù)定義與幫助信息展示。
  • 解析大小閾值字符串(如“10MB”)并轉(zhuǎn)換為字節(jié)值。

4.序列化與導(dǎo)出

  • Jackson 或 Gson:將結(jié)果序列化為 JSON。
  • 使用 StringBuilderPrintWriter 導(dǎo)出為純文本或 CSV 格式。

5.日志框架

SLF4J + Logback:記錄掃描進(jìn)度、錯(cuò)誤文件及異常堆棧,支持日志級(jí)別控制。

6.單元測(cè)試

  • JUnit 5:編寫(xiě)測(cè)試用例,覆蓋各種邊界情況,如空目錄、權(quán)限受限文件、閾值邊界值等。
  • Mockito:模擬文件系統(tǒng)或依賴(lài),以便在測(cè)試中控制文件屬性。

四、實(shí)現(xiàn)思路詳細(xì)介紹

結(jié)合需求與技術(shù),項(xiàng)目的實(shí)現(xiàn)思路可以分為以下幾個(gè)步驟:

1.閾值解析

  • 編寫(xiě) SizeParser 工具,將用戶(hù)傳入的字符串(如“1.5GB”、“1024KB”、“500”)解析為對(duì)應(yīng)的字節(jié)數(shù)(long)。
  • 支持大小寫(xiě)單位、整數(shù)和小數(shù)格式。

2.文件掃描

  • 對(duì)于單個(gè)文件:直接調(diào)用 Files.size(Path) 讀取大小,并與閾值比較。
  • 對(duì)于目錄遞歸:使用 Files.walk(Path start, FileVisitOption…)ForkJoinPool 結(jié)合 RecursiveTask 進(jìn)行并行遍歷。

3.并發(fā)執(zhí)行

  • 在目錄遍歷過(guò)程中,將子目錄掃描任務(wù)提交到線程池或 ForkJoin 框架,以提高 I/O 并行度。
  • 收集所有符合條件的文件,使用線程安全的集合(如 ConcurrentLinkedQueue)存儲(chǔ)中間結(jié)果。

4.結(jié)果排序與導(dǎo)出

  • 在掃描完成后,對(duì)結(jié)果列表按文件大小進(jìn)行升序或降序排序。
  • 根據(jù)用戶(hù)指定的導(dǎo)出格式,調(diào)用不同序列化或?qū)懗鲞壿嫛?/li>

5.命令行入口

  • Main 類(lèi)中使用 CLI 庫(kù)解析參數(shù)(最小/最大大小、路徑列表、輸出格式、并發(fā)數(shù)等)。
  • 調(diào)用工具類(lèi)方法,獲取結(jié)果并在控制臺(tái)打印或?qū)С鑫募?/li>

6.錯(cuò)誤處理與日志

  • 針對(duì) IOException、無(wú)權(quán)限訪問(wèn)等異常,記錄日志并在測(cè)試模式下拋出或在生產(chǎn)模式下忽略。
  • 提供 “--fail-on-error” 選項(xiàng),決定遇到錯(cuò)誤時(shí)是否中斷掃描。

五、完整實(shí)現(xiàn)代碼

// ============================================================================
// 文件:SizeParser.java
// 包名:com.example.filesizefilter
// 功能:將用戶(hù)輸入的大小閾值字符串(如 "1.5GB"、"1024KB")解析為字節(jié)數(shù)
// ============================================================================
package com.example.filesizefilter;

import java.util.regex.*;
import com.example.filesizefilter.exception.FilterException;

public class SizeParser {
    // 支持單位:B、KB、MB、GB(大小寫(xiě)均可)
    private static final Pattern PATTERN = Pattern.compile(
        "\\s*([0-9]+(?:\\.[0-9]+)?)\\s*(B|KB|MB|GB)?\\s*", Pattern.CASE_INSENSITIVE);

    /**
     * 將字符串表示的大小轉(zhuǎn)換為字節(jié)數(shù)
     * @param sizeStr 大小字符串,如 "512MB", "1.5 GB", "1024"
     * @return 對(duì)應(yīng)的字節(jié)數(shù)
     */
    public static long parse(String sizeStr) {
        Matcher m = PATTERN.matcher(sizeStr);
        if (!m.matches()) {
            throw new FilterException("無(wú)法解析大小閾值:" + sizeStr);
        }
        double value = Double.parseDouble(m.group(1));
        String unit = m.group(2);
        if (unit == null || unit.equalsIgnoreCase("B")) {
            return (long) value;
        } else if (unit.equalsIgnoreCase("KB")) {
            return (long) (value * 1024L);
        } else if (unit.equalsIgnoreCase("MB")) {
            return (long) (value * 1024L * 1024L);
        } else if (unit.equalsIgnoreCase("GB")) {
            return (long) (value * 1024L * 1024L * 1024L);
        } else {
            throw new FilterException("不支持的單位:" + unit);
        }
    }
}

// ============================================================================
// 文件:FilterResult.java
// 包名:com.example.filesizefilter
// 功能:封裝過(guò)濾后文件及其大小信息
// ============================================================================
package com.example.filesizefilter;

import java.io.File;

public class FilterResult {
    private final File file;
    private final long size;

    public FilterResult(File file, long size) {
        this.file = file;
        this.size = size;
    }
    public File getFile() { return file; }
    public long getSize() { return size; }
}

// ============================================================================
// 文件:FileSizeFilter.java
// 包名:com.example.filesizefilter
// 功能:核心過(guò)濾類(lèi),支持按最小、最大閾值對(duì)文件或目錄遞歸掃描并行過(guò)濾
// ============================================================================
package com.example.filesizefilter;

import java.io.File;
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.*;
import java.util.concurrent.*;
import com.example.filesizefilter.exception.FilterException;

public class FileSizeFilter {
    /**
     * 按閾值過(guò)濾單個(gè)文件
     * @param file      文件對(duì)象
     * @param minBytes  最小字節(jié)數(shù)(null 表示不限制)
     * @param maxBytes  最大字節(jié)數(shù)(null 表示不限制)
     * @return 如果符合條件返回 FilterResult,否則返回 null
     */
    public static FilterResult filter(File file, Long minBytes, Long maxBytes) {
        if (!file.isFile()) {
            throw new FilterException("不是文件:" + file.getPath());
        }
        long size = file.length();
        if ((minBytes == null || size >= minBytes) && (maxBytes == null || size <= maxBytes)) {
            return new FilterResult(file, size);
        }
        return null;
    }

    /**
     * 遞歸掃描目錄并按大小過(guò)濾,單線程實(shí)現(xiàn)
     */
    public static List<FilterResult> filterDirectory(File dir, Long minBytes, Long maxBytes) {
        if (!dir.isDirectory()) {
            throw new FilterException("不是目錄:" + dir.getPath());
        }
        List<FilterResult> results = new ArrayList<>();
        try {
            Files.walkFileTree(dir.toPath(), new SimpleFileVisitor<Path>() {
                @Override
                public FileVisitResult visitFile(Path path, BasicFileAttributes attrs) {
                    long size = attrs.size();
                    if ((minBytes == null || size >= minBytes) && (maxBytes == null || size <= maxBytes)) {
                        results.add(new FilterResult(path.toFile(), size));
                    }
                    return FileVisitResult.CONTINUE;
                }
                @Override
                public FileVisitResult visitFileFailed(Path path, IOException exc) {
                    // 記錄日志并繼續(xù)
                    System.err.println("無(wú)法訪問(wèn)文件:" + path + ",原因:" + exc.getMessage());
                    return FileVisitResult.CONTINUE;
                }
            });
        } catch (IOException e) {
            throw new FilterException("目錄掃描失?。? + dir.getPath(), e);
        }
        return results;
    }

    /**
     * 并行掃描多個(gè)路徑(文件或目錄),使用線程池
     */
    public static List<FilterResult> filterPaths(
            List<File> paths, Long minBytes, Long maxBytes, int threadCount) {
        ExecutorService pool = Executors.newFixedThreadPool(threadCount);
        List<Future<List<FilterResult>>> futures = new ArrayList<>();
        for (File path : paths) {
            futures.add(pool.submit(() -> {
                if (path.isDirectory()) {
                    return filterDirectory(path, minBytes, maxBytes);
                } else if (path.isFile()) {
                    FilterResult r = filter(path, minBytes, maxBytes);
                    return r != null ? Collections.singletonList(r) : Collections.emptyList();
                } else {
                    throw new FilterException("路徑不存在:" + path.getPath());
                }
            }));
        }
        List<FilterResult> all = new ArrayList<>();
        for (Future<List<FilterResult>> f : futures) {
            try {
                all.addAll(f.get());
            } catch (Exception e) {
                System.err.println("任務(wù)執(zhí)行失?。? + e.getMessage());
            }
        }
        pool.shutdown();
        return all;
    }
}

// ============================================================================
// 文件:Main.java
// 包名:com.example.filesizefilter
// 功能:命令行入口,解析參數(shù)、調(diào)用過(guò)濾邏輯、輸出結(jié)果(支持排序與格式化導(dǎo)出)
// ============================================================================
package com.example.filesizefilter;

import java.io.*;
import java.util.*;
import com.example.filesizefilter.exception.FilterException;

public class Main {
    private static void printHelp() {
        System.out.println("Usage: java -jar filesizefilter.jar [options] <path1> <path2> ...");
        System.out.println("Options:");
        System.out.println("  --min <size>       最小閾值,如 10MB");
        System.out.println("  --max <size>       最大閾值,如 1GB");
        System.out.println("  -t, --threads <n>  并行線程數(shù),默認(rèn) 4");
        System.out.println("  -s, --sort <asc|desc>  按大小升序或降序排序,默認(rèn) asc");
        System.out.println("  -o, --output <file>    導(dǎo)出結(jié)果到文件(CSV 格式),默認(rèn)輸出到控制臺(tái)");
        System.out.println("  -h, --help         顯示幫助信息");
    }

    public static void main(String[] args) {
        if (args.length == 0) { printHelp(); return; }
        Long minBytes = null, maxBytes = null;
        int threads = 4;
        boolean asc = true;
        String outputPath = null;
        List<String> paths = new ArrayList<>();

        for (int i = 0; i < args.length; i++) {
            switch (args[i]) {
                case "--min": minBytes = SizeParser.parse(args[++i]); break;
                case "--max": maxBytes = SizeParser.parse(args[++i]); break;
                case "-t": case "--threads": threads = Integer.parseInt(args[++i]); break;
                case "-s": case "--sort":
                    asc = args[++i].equalsIgnoreCase("asc"); break;
                case "-o": case "--output": outputPath = args[++i]; break;
                case "-h": case "--help": printHelp(); return;
                default: paths.add(args[i]);
            }
        }
        if (paths.isEmpty()) { System.err.println("未指定路徑"); printHelp(); return; }

        List<File> fileList = new ArrayList<>();
        for (String p : paths) fileList.add(new File(p));

        try {
            List<FilterResult> results = FileSizeFilter.filterPaths(
                fileList, minBytes, maxBytes, threads);

            // 排序
            results.sort(Comparator.comparingLong(FilterResult::getSize));
            if (!asc) Collections.reverse(results);

            // 輸出
            if (outputPath == null) {
                for (FilterResult r : results) {
                    System.out.printf("%s, %d%n", r.getFile().getPath(), r.getSize());
                }
            } else {
                try (PrintWriter pw = new PrintWriter(new FileWriter(outputPath))) {
                    pw.println("文件路徑,大小(字節(jié))");
                    for (FilterResult r : results) {
                        pw.printf("%s,%d%n", r.getFile().getPath(), r.getSize());
                    }
                }
                System.out.println("已導(dǎo)出到 " + outputPath);
            }
        } catch (FilterException e) {
            System.err.println("Error: " + e.getMessage());
        }
    }
}

// ============================================================================
// 文件:FilterException.java
// 包名:com.example.filesizefilter.exception
// 功能:統(tǒng)一異常類(lèi)型,用于包裝解析與過(guò)濾過(guò)程中的錯(cuò)誤
// ============================================================================
package com.example.filesizefilter.exception;

public class FilterException extends RuntimeException {
    public FilterException(String msg) { super(msg); }
    public FilterException(String msg, Throwable cause) { super(msg, cause); }
}

六、代碼詳細(xì)解讀

1.SizeParser

  • 利用正則表達(dá)式解析用戶(hù)輸入的字符串,支持整數(shù)和小數(shù)部分,并識(shí)別單位(B/KB/MB/GB),將其換算為字節(jié)數(shù);
  • 對(duì)不符合格式的輸入拋出 FilterException,便于上層捕獲并提示。

2.FilterResult

簡(jiǎn)單的 POJO,封裝被過(guò)濾文件 File 對(duì)象與其大小 long size,便于統(tǒng)一返回與后續(xù)排序、輸出處理。

3.FileSizeFilter

  • filter(File, Long, Long):針對(duì)單個(gè)文件進(jìn)行大小判斷;
  • filterDirectory:使用 Files.walkFileTree 遞歸掃描目錄,按文件屬性 BasicFileAttributes 獲取文件大小并篩選,同時(shí)對(duì)訪問(wèn)失敗的文件打印錯(cuò)誤日志;
  • filterPaths:將多個(gè)路徑(文件或目錄)分配給線程池并行執(zhí)行,保證性能,同時(shí)收集所有結(jié)果。

4.Main(命令行入口)

  • 解析命令行參數(shù):最小/最大閾值、線程數(shù)、排序規(guī)則、輸出文件路徑以及待掃描路徑列表;
  • 調(diào)用 FileSizeFilter.filterPaths 獲取 FilterResult 列表,按大小升降序排序,輸出到控制臺(tái)或?qū)С鰹?CSV 文件;
  • 對(duì)無(wú)效輸入或運(yùn)行錯(cuò)誤進(jìn)行友好提示。

5.FilterException

統(tǒng)一封裝所有解析與掃描過(guò)程中的異常,簡(jiǎn)化錯(cuò)誤處理與信息傳播。

七、項(xiàng)目詳細(xì)總結(jié)

本文以“Java 實(shí)現(xiàn)文件大小過(guò)濾”為主題,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)通用、高性能的文件大小篩選工具。主要包含:

  • 靈活閾值解析:支持多種單位和小數(shù)格式,方便用戶(hù)以熟悉的方式指定閾值;
  • 目錄遞歸與并行處理:結(jié)合 Files.walkFileTree 與線程池,實(shí)現(xiàn)單線程與多線程兩種掃描模式,兼顧易用性與性能;
  • 排序與輸出:按用戶(hù)需求支持升序/降序排序,并可輸出到控制臺(tái)或 CSV 文件,方便后續(xù)數(shù)據(jù)分析;
  • 健壯異常處理:對(duì)無(wú)效輸入、文件訪問(wèn)失敗等場(chǎng)景進(jìn)行捕獲與提示,保證工具的可用性;
  • 可擴(kuò)展設(shè)計(jì):后續(xù)可增加更多過(guò)濾條件(如日期、擴(kuò)展名),或?qū)С?JSON/HTML 等格式。

八、項(xiàng)目常見(jiàn)問(wèn)題及解答

1.如何只指定最小閾值,不限制最大?

在命令行中只傳入 --min 參數(shù),不傳 --max,即可過(guò)濾出所有大于等于該值的文件。

2.目錄中文件過(guò)多,掃描卡頓怎么辦?

可通過(guò) -t 參數(shù)增加線程數(shù);或改用更高效的 ForkJoinPool 分支并行模型以提高 I/O 利用率。

3.如何導(dǎo)出為 JSON 格式?

Main 中添加對(duì) --format=json 的支持,使用 Jackson 將 results 序列化為 JSON 并輸出。

4.掃描過(guò)程中遇到權(quán)限不足的文件會(huì)如何處理?

filterDirectory 中的 visitFileFailed 會(huì)打印錯(cuò)誤日志并繼續(xù),工具默認(rèn)忽略不可訪問(wèn)文件,避免中斷整個(gè)掃描。

5.能否將該模塊作為庫(kù)集成到其他項(xiàng)目?

直接將 SizeParserFileSizeFilter 等類(lèi)復(fù)制到項(xiàng)目中,或打包為 Jar,在 pom.xml 中添加依賴(lài)即可使用其 API。

九、擴(kuò)展方向與性能優(yōu)化

1.基于 NIO2 異步 I/O

采用 AsynchronousFileChannel 進(jìn)行非阻塞讀取,并結(jié)合 CompletableFuture 管理回調(diào),減少阻塞等待;

2.基于 Fork/Join 的分支掃描

將目錄拆分為子任務(wù),使用 RecursiveTask 并行調(diào)用,提高在多核環(huán)境下的掃描速度;

3.更多過(guò)濾條件

支持按最后修改時(shí)間、文件類(lèi)型(擴(kuò)展名/正則匹配)、文件所有者等多維度過(guò)濾;

4.導(dǎo)出多種格式

在命令行中加入 --format 選項(xiàng),可導(dǎo)出 CSV、JSON、XML、HTML 表格等格式,滿(mǎn)足不同需求;

5.監(jiān)控與變更通知

結(jié)合 WatchService 實(shí)時(shí)監(jiān)控目錄中文件變化,并在符合閾值條件時(shí)發(fā)送郵件、Webhook 通知或日志告警;

6.GUI 圖形化工具

基于 Swing 或 JavaFX 開(kāi)發(fā)可視化客戶(hù)端,用戶(hù)通過(guò)交互界面配置閾值、路徑和導(dǎo)出方式;

7.集成定時(shí)任務(wù)

將工具封裝為 Spring Boot 應(yīng)用,定時(shí)執(zhí)行大小過(guò)濾并自動(dòng)清理或歸檔,形成完整的文件管理服務(wù)。

到此這篇關(guān)于使用Java實(shí)現(xiàn)文件大小過(guò)濾功能(附源碼)的文章就介紹到這了,更多相關(guān)Java文件過(guò)濾內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java SE求解漢諾塔問(wèn)題的示例代碼

    Java SE求解漢諾塔問(wèn)題的示例代碼

    漢諾塔問(wèn)題是一個(gè)經(jīng)典的問(wèn)題。漢諾塔(Hanoi Tower),又稱(chēng)河內(nèi)塔,源于印度一個(gè)古老傳說(shuō)。本文將用Java SE求解這一問(wèn)題,感興趣的可以學(xué)習(xí)一下
    2022-03-03
  • Java設(shè)計(jì)模式之抽象工廠模式詳解

    Java設(shè)計(jì)模式之抽象工廠模式詳解

    這篇文章主要介紹了Java設(shè)計(jì)模式之抽象工廠模式詳解,抽象工廠是一種為訪問(wèn)類(lèi)提供一個(gè)創(chuàng)建一組相關(guān)或相互依賴(lài)對(duì)象的接口,且訪問(wèn)類(lèi)無(wú)須指定所要產(chǎn)品的具體類(lèi)就能得到同族的、不同等級(jí)的產(chǎn)品的模式結(jié)構(gòu),需要的朋友可以參考下
    2023-09-09
  • java批量解析微信dat文件

    java批量解析微信dat文件

    這篇文章主要為大家詳細(xì)介紹了java批量解析微信dat文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 詳解MyBatis延遲加載是如何實(shí)現(xiàn)的

    詳解MyBatis延遲加載是如何實(shí)現(xiàn)的

    MyBatis 的延遲加載(懶加載)特性允許在需要使用關(guān)聯(lián)對(duì)象數(shù)據(jù)時(shí)才進(jìn)行加載,而不是在執(zhí)行主查詢(xún)時(shí)就加載所有相關(guān)數(shù)據(jù),我們將通過(guò)以下幾個(gè)方面來(lái)深入了解MyBatis的延遲加載實(shí)現(xiàn)機(jī)制,需要的朋友可以參考下
    2024-07-07
  • Spring Properties的使用和配置方法

    Spring Properties的使用和配置方法

    這篇文章主要介紹了Spring Properties的使用和配置方法,本文不是原理分析、源碼分析文章,只是希望可以幫助讀者更好地理解和使用 Spring Properties,有興趣的可以了解一下
    2018-01-01
  • Jtable和JTree的寫(xiě)法示例代碼

    Jtable和JTree的寫(xiě)法示例代碼

    這篇文章主要介紹了Jtable和JTree的基本概念,常用構(gòu)造方法,以及二者的通用寫(xiě)法,需要的朋友可以了解下。
    2017-09-09
  • springboot接入微信app支付的方法

    springboot接入微信app支付的方法

    本文使用springboot集成微信支付服務(wù),包含微信統(tǒng)一支付訂單接口,以及支付回調(diào)接口等,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Mybatis-Plus自動(dòng)填充更新操作相關(guān)字段的實(shí)現(xiàn)

    Mybatis-Plus自動(dòng)填充更新操作相關(guān)字段的實(shí)現(xiàn)

    這篇文章主要介紹了Mybatis-Plus自動(dòng)填充更新操作相關(guān)字段的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Java中類(lèi)賦值的解釋實(shí)例詳解

    Java中類(lèi)賦值的解釋實(shí)例詳解

    這篇文章主要介紹了Java中類(lèi)賦值的解釋實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • SpringBoot中使用定時(shí)任務(wù)schedule詳解

    SpringBoot中使用定時(shí)任務(wù)schedule詳解

    文章介紹了如何在Spring應(yīng)用中使用@EnableScheduling注解啟用定時(shí)任務(wù),并創(chuàng)建一個(gè)配置類(lèi)來(lái)定義定時(shí)任務(wù)的執(zhí)行,文章還詳細(xì)解釋了Cron表達(dá)式的基本語(yǔ)法,并提供了多個(gè)常用的Cron表達(dá)式示例,以幫助讀者理解和應(yīng)用定時(shí)任務(wù)
    2025-11-11

最新評(píng)論

安西县| 永清县| 白河县| 金乡县| 深圳市| 尼玛县| 吉安县| 桦川县| 桃江县| 阳谷县| 临清市| 鄂尔多斯市| 永修县| 沈丘县| 新化县| 精河县| 米泉市| 华安县| 东乡县| 怀柔区| 易门县| 土默特右旗| 常山县| 云梦县| 清远市| 阳春市| 彭山县| 大名县| 陆良县| 盐亭县| 普兰店市| 通江县| 揭东县| 合山市| 郸城县| 当涂县| 盐源县| 满洲里市| 嫩江县| 腾冲县| 威信县|