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

Java實現(xiàn)刪除文件中的指定內(nèi)容

 更新時間:2025年06月16日 16:45:27   作者:Katie。  
在日常開發(fā)中,經(jīng)常需要對文本文件進行批量處理,其中,刪除文件中指定內(nèi)容是最常見的需求之一,下面我們就來看看如何使用java實現(xiàn)刪除文件中的指定內(nèi)容吧

1. 項目背景詳細介紹

在日常開發(fā)中,經(jīng)常需要對文本文件進行批量處理,如日志清洗、配置文件修正、數(shù)據(jù)預處理等操作。其中,“刪除文件中指定內(nèi)容”是最常見的需求之一。無論是需要移除敏感信息、剔除空行、屏蔽指定日志、刪除多余字符,還是對大文本進行關鍵字替換,都離不開對文件內(nèi)容的掃描、匹配和寫回操作。

Java 作為企業(yè)級應用開發(fā)的主力語言,其在文件 I/O、正則處理和字符編碼方面提供了完善的 API。然而,實現(xiàn)一個高效、健壯、可擴展的“刪除指定內(nèi)容”工具,還需解決以下關鍵點:

  • 大文件處理:避免一次性將整個文件讀入內(nèi)存,需采取分塊或流式處理,否則在處理數(shù) GB 大文件時易導致 OOM。
  • 字符編碼:支持各類文本編碼(UTF-8、GBK、ISO-8859-1 等),并在寫回時保持一致或按需轉換。
  • 內(nèi)容匹配:可基于固定字符串、正則表達式、行首/行尾匹配等多種規(guī)則刪除指定文本。
  • 原子寫入:在處理失敗或中斷時,需保障源文件不被破壞,可先寫入臨時文件再原子替換。
  • 可配置性:允許用戶通過命令行或配置文件靈活指定待刪除內(nèi)容規(guī)則、編碼、備份路徑等參數(shù)。
  • 性能與并發(fā):對大規(guī)模文件或多個文件目錄批量處理時,支持多線程并發(fā),縮短處理時間。

本項目將系統(tǒng)化地展示如何基于 Java 8+ 平臺,實現(xiàn)一個功能完備的“刪除文件中指定內(nèi)容”工具,涵蓋項目背景、需求、相關技術、實現(xiàn)思路、完整代碼、代碼解讀、總結、常見問答與擴展優(yōu)化九大模塊,篇幅超過10000漢字,適合作為技術博客或課堂示例。

2. 項目需求詳細介紹

2.1 功能需求

1.批量文件處理

支持指定單個文件或目錄,遞歸掃描 .txt、.log、.cfg 等文本文件,并對每個文件執(zhí)行刪除操作。

2.刪除規(guī)則配置

支持多種規(guī)則:

  • 簡單字符串匹配(刪除包含該字符串的所有行或行內(nèi)該片段);
  • 正則表達式(基于 Java Pattern 的強大匹配能力);
  • 行首/行尾匹配(如以 # 開頭的注釋行);
  • 空行刪除(刪除所有空行或僅刪除全空白行)。

3.編碼處理

支持按文件原編碼讀取和寫入,或指定統(tǒng)一編碼輸出。

4.備份與原子替換

對原文件進行備份(如 .bak 后綴),然后將刪除內(nèi)容后的結果寫入臨時文件,最后原子替換。

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

可配置并發(fā)線程數(shù),使用線程池并行處理多個文件,加快批量處理速度。

6.命令行接口

提供 CLI:

java -jar file-cleaner.jar 
  --path <file|dir> 
  --ruleType <string|regex|prefix|suffix|blank> 
  --rule <pattern> 
  [--backup true|false] 
  [--encoding UTF-8] 
  [--threads N]

支持 --help 查看使用說明。

7.日志輸出

使用 SLF4J 打印 INFO 級別處理進度和 WARN/ERROR 級別異常;支持將日志輸出到控制臺和文件。

8.單元測試

使用 JUnit 5 驗證各種規(guī)則下的刪除正確性、編碼兼容性、備份與原子替換邏輯、多線程一致性等。

9.易用文檔

提供 README 和使用示例,便于用戶快速上手。

2.2 非功能需求

性能:對 1GB 以上大文件進行刪除規(guī)則處理時,不超過一分鐘;

健壯性:處理過程中捕獲并記錄異常,保持其他文件正常執(zhí)行;

可維護性:模塊化代碼結構、詳細注釋;

可擴展性:后續(xù)可增刪規(guī)則類型或集成 GUI/Web 界面;

兼容性:Java8+,跨平臺運行。

3. 相關技術詳細介紹

3.1 Java NIO.2 文件操作

java.nio.file.Files:提供文件讀寫、復制、屬性操作等高效 API;

java.nio.file.Path 與 FileVisitor:用于目錄遞歸遍歷;

3.2 字符流與緩沖

使用 BufferedReader 和 BufferedWriter 或 Files.newBufferedReader/newBufferedWriter,按行讀取和寫入,避免一次性讀入整個文件;

3.3 正則表達式

java.util.regex.Pattern 和 Matcher:支持任意復雜匹配規(guī)則;使用預編譯 Pattern 提升性能;

3.4 并發(fā)編程

ExecutorService + CompletionService:管理固定大小線程池,對文件任務并行執(zhí)行并收集結果;

線程安全日志:SLF4J 與 Logback 保證在并發(fā)情況下日志同步輸出;

3.5 原子文件替換

寫入臨時文件后使用 Files.move(temp, original, StandardCopyOption.ATOMIC_MOVE) 實現(xiàn)原子替換;

3.6 單元與集成測試

JUnit 5 @TempDir 提供臨時目錄;

針對小文件和大文件模擬測試;

4. 實現(xiàn)思路詳細介紹

1.命令行解析

使用 Apache Commons CLI 定義選項 --path、--ruleType、--rule、--backup、--encoding、--threads;

校驗必需參數(shù)存在且合法;

2.規(guī)則抽象

定義接口 ContentRule,方法 boolean matches(String line);

提供 StringRule、RegexRule、PrefixRule、SuffixRule、BlankRule 等實現(xiàn);

3.文件處理任務

對單個文件創(chuàng)建 FileCleanTask implements Callable<FileResult>,內(nèi)部:

  • 根據(jù) Charset 創(chuàng)建 BufferedReader/BufferedWriter;
  • 逐行讀取,對每一行調(diào)用 rule.matches(line),若匹配則跳過,否則寫入輸出;
  • 處理完成后備份(如啟用)、原子替換;
  • 返回處理統(tǒng)計結果(總行數(shù)、刪除行數(shù)、出錯標志);

4.批量調(diào)度

  • 遞歸遍歷目錄收集所有待處理文件 List<Path>;
  • 提交給 ExecutorService,使用 CompletionService 或 invokeAll 收集 Future<FileResult>;
  • 輸出總體統(tǒng)計與單文件統(tǒng)計;

5.日志與進度

在每個任務開始/結束時記錄日志;主線程可根據(jù)完成的 Future 輸出進度百分比;

6.錯誤處理

  • 單個文件異常時記錄 ERROR,繼續(xù)處理其他文件;
  • 全局異常退出時打印總結信息;

7.單元測試

使用 JUnit5 @TempDir 創(chuàng)建測試文件;測試各種規(guī)則;測試備份與原子替換;

8.項目文檔

在 README.md 中說明使用方式、示例命令、參數(shù)含義;

5. 完整實現(xiàn)代

// File: ContentRule.java
package com.example.filecleaner.rule;
 
/** 內(nèi)容刪除規(guī)則接口 */
public interface ContentRule {
    /** 判斷該行是否應被刪除 */
    boolean matches(String line);
}
 
// File: StringRule.java
package com.example.filecleaner.rule;
 
/** 簡單字符串匹配規(guī)則 */
public class StringRule implements ContentRule {
    private final String target;
    public StringRule(String target) { this.target = target; }
    @Override public boolean matches(String line) {
        return line.contains(target);
    }
}
 
// File: RegexRule.java
package com.example.filecleaner.rule;
 
import java.util.regex.*;
 
/** 正則表達式匹配規(guī)則 */
public class RegexRule implements ContentRule {
    private final Pattern pattern;
    public RegexRule(String regex) { this.pattern = Pattern.compile(regex); }
    @Override public boolean matches(String line) {
        return pattern.matcher(line).find();
    }
}
 
// File: PrefixRule.java
package com.example.filecleaner.rule;
 
/** 行首匹配規(guī)則 */
public class PrefixRule implements ContentRule {
    private final String prefix;
    public PrefixRule(String prefix) { this.prefix = prefix; }
    @Override public boolean matches(String line) {
        return line.startsWith(prefix);
    }
}
 
// File: SuffixRule.java
package com.example.filecleaner.rule;
 
/** 行尾匹配規(guī)則 */
public class SuffixRule implements ContentRule {
    private final String suffix;
    public SuffixRule(String suffix) { this.suffix = suffix; }
    @Override public boolean matches(String line) {
        return line.endsWith(suffix);
    }
}
 
// File: BlankRule.java
package com.example.filecleaner.rule;
 
/** 空行匹配規(guī)則 */
public class BlankRule implements ContentRule {
    private final boolean trimOnly;
    public BlankRule(boolean trimOnly) { this.trimOnly = trimOnly; }
    @Override public boolean matches(String line) {
        return trimOnly ? line.trim().isEmpty() : line.isEmpty();
    }
}
 
// File: FileCleanTask.java
package com.example.filecleaner.task;
 
import com.example.filecleaner.rule.ContentRule;
import org.slf4j.*;
import java.io.*;
import java.nio.charset.*;
import java.nio.file.*;
import java.util.concurrent.*;
 
/** 單文件清理任務 */
public class FileCleanTask implements Callable<FileCleanResult> {
    private static final Logger logger = LoggerFactory.getLogger(FileCleanTask.class);
    private final Path file;
    private final ContentRule rule;
    private final Charset charset;
    private final boolean backup;
 
    public FileCleanTask(Path file, ContentRule rule, Charset charset, boolean backup) {
        this.file = file; this.rule = rule; this.charset = charset; this.backup = backup;
    }
 
    @Override
    public FileCleanResult call() {
        long total = 0, deleted = 0;
        Path temp = file.resolveSibling(file.getFileName()+".tmp");
        try (BufferedReader br = Files.newBufferedReader(file, charset);
             BufferedWriter bw = Files.newBufferedWriter(temp, charset)) {
            String line;
            while ((line = br.readLine()) != null) {
                total++;
                if (rule.matches(line)) {
                    deleted++;
                } else {
                    bw.write(line); bw.newLine();
                }
            }
        } catch (IOException e) {
            logger.error("處理文件出錯 {}", file, e);
            return new FileCleanResult(file, total, deleted, false);
        }
        try {
            if (backup) Files.copy(file, file.resolveSibling(file.getFileName()+".bak"),
                                   StandardCopyOption.REPLACE_EXISTING);
            Files.move(temp, file, StandardCopyOption.ATOMIC_MOVE, StandardCopyOption.REPLACE_EXISTING);
        } catch (IOException e) {
            logger.error("替換原文件出錯 {}", file, e);
            return new FileCleanResult(file, total, deleted, false);
        }
        return new FileCleanResult(file, total, deleted, true);
    }
}
 
// File: FileCleanResult.java
package com.example.filecleaner.task;
 
import java.nio.file.*;
 
/** 單文件清理結果 */
public class FileCleanResult {
    public final Path file;
    public final long totalLines;
    public final long deletedLines;
    public final boolean success;
    public FileCleanResult(Path file, long totalLines, long deletedLines, boolean success) {
        this.file = file; this.totalLines = totalLines;
        this.deletedLines = deletedLines; this.success = success;
    }
}
 
// File: FileCleaner.java
package com.example.filecleaner.core;
 
import com.example.filecleaner.rule.*;
import com.example.filecleaner.task.*;
import org.slf4j.*;
import java.nio.charset.*;
import java.nio.file.*;
import java.util.*;
import java.util.concurrent.*;
 
/** 核心清理器,管理任務調(diào)度 */
public class FileCleaner {
    private static final Logger logger = LoggerFactory.getLogger(FileCleaner.class);
    private final ContentRule rule;
    private final Charset charset;
    private final boolean backup;
    private final ExecutorService pool;
 
    public FileCleaner(ContentRule rule, Charset charset, boolean backup, int threads) {
        this.rule = rule; this.charset = charset; this.backup = backup;
        this.pool = Executors.newFixedThreadPool(threads);
    }
 
    public List<FileCleanResult> clean(Path root) throws IOException, InterruptedException {
        List<Path> files = new ArrayList<>();
        Files.walkFileTree(root, new SimpleFileVisitor<>() {
            @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
                if (Files.isRegularFile(file)) files.add(file);
                return FileVisitResult.CONTINUE;
            }
        });
        List<Future<FileCleanResult>> futures = new ArrayList<>();
        for (Path f : files) {
            futures.add(pool.submit(new FileCleanTask(f, rule, charset, backup)));
        }
        pool.shutdown(); pool.awaitTermination(1, TimeUnit.HOURS);
 
        List<FileCleanResult> results = new ArrayList<>();
        for (Future<FileCleanResult> f : futures) {
            try { results.add(f.get()); }
            catch (ExecutionException e) {
                logger.error("任務執(zhí)行異常", e.getCause());
            }
        }
        return results;
    }
}
 
// File: FileCleanerCLI.java
package com.example.filecleaner;
 
import com.example.filecleaner.rule.*;
import com.example.filecleaner.core.FileCleaner;
import org.apache.commons.cli.*;
import java.nio.charset.*;
import java.nio.file.*;
import java.util.*;
 
/** 命令行入口 */
public class FileCleanerCLI {
    public static void main(String[] args) {
        Options opts = new Options();
        opts.addRequiredOption("p","path",true,"文件或目錄路徑");
        opts.addRequiredOption("t","ruleType",true,"規(guī)則類型: string|regex|prefix|suffix|blank");
        opts.addRequiredOption("r","rule",true,"規(guī)則內(nèi)容");
        opts.addOption("b","backup",true,"是否備份原文件,默認true");
        opts.addOption("e","encoding",true,"文件編碼,默認UTF-8");
        opts.addOption("n","threads",true,"線程數(shù),默認4");
        opts.addOption("h","help",false,"幫助");
        try {
            CommandLine cmd = new DefaultParser().parse(opts, args);
            if (cmd.hasOption("h")) {
                new HelpFormatter().printHelp("file-cleaner", opts);
                return;
            }
            Path path = Paths.get(cmd.getOptionValue("p"));
            String type = cmd.getOptionValue("t");
            String ruleText = cmd.getOptionValue("r");
            boolean backup = Boolean.parseBoolean(cmd.getOptionValue("b","true"));
            Charset cs = Charset.forName(cmd.getOptionValue("e","UTF-8"));
            int threads = Integer.parseInt(cmd.getOptionValue("n","4"));
 
            ContentRule rule = switch(type) {
                case "string" -> new StringRule(ruleText);
                case "regex"  -> new RegexRule(ruleText);
                case "prefix" -> new PrefixRule(ruleText);
                case "suffix" -> new SuffixRule(ruleText);
                case "blank"  -> new BlankRule(Boolean.parseBoolean(ruleText));
                default -> throw new IllegalArgumentException("未知規(guī)則類型");
            };
 
            FileCleaner cleaner = new FileCleaner(rule, cs, backup, threads);
            List<?> results = cleaner.clean(path);
            results.forEach(r -> System.out.println(r));
        } catch (Exception e) {
            System.err.println("執(zhí)行出錯: " + e.getMessage());
        }
    }
}
 
// File: FileCleanerTest.java
package com.example.filecleaner;
 
import com.example.filecleaner.rule.*;
import com.example.filecleaner.core.*;
import org.junit.jupiter.api.*;
import java.nio.charset.*;
import java.nio.file.*;
import java.util.*;
import static org.junit.jupiter.api.Assertions.*;
 
/** JUnit 單元測試 */
public class FileCleanerTest {
    @TempDir Path tmp;
 
    @Test
    void testStringRuleDeletion() throws Exception {
        Path file = tmp.resolve("test.txt");
        Files.writeString(file, "keep\nremove me\nkeep");
        FileCleaner cleaner = new FileCleaner(new StringRule("remove"), 
            StandardCharsets.UTF_8, true, 1);
        List<?> results = cleaner.clean(tmp);
        String content = Files.readString(file);
        assertFalse(content.contains("remove me"));
        assertTrue(Files.exists(tmp.resolve("test.txt.bak")));
    }
 
    @Test
    void testRegexRuleDeletion() throws Exception {
        Path file = tmp.resolve("r.txt");
        Files.writeString(file, "123 abc\n456 def\n789 ghi");
        FileCleaner cleaner = new FileCleaner(new RegexRule("\\d{3} abc"), 
            StandardCharsets.UTF_8, false, 1);
        cleaner.clean(tmp);
        String content = Files.readString(file);
        assertFalse(content.contains("abc"));
    }
 
    @Test
    void testBlankRuleDeletion() throws Exception {
        Path file = tmp.resolve("b.txt");
        Files.writeString(file, "\n\nline\n \n");
        FileCleaner cleaner = new FileCleaner(new BlankRule(true), 
            StandardCharsets.UTF_8, false, 1);
        cleaner.clean(tmp);
        String content = Files.readString(file);
        assertTrue(content.contains("line"));
        assertFalse(content.split("\n")[0].isBlank());
    }
}

6. 代碼詳細解讀

ContentRule 及其實現(xiàn):定義刪除規(guī)則接口及五種常用規(guī)則,實現(xiàn)字符串、正則、前綴、后綴和空行匹配。

FileCleanTask:單文件清理任務,按行讀取并判斷是否匹配規(guī)則,寫入臨時文件后備份并原子替換。

FileCleaner:核心調(diào)度器,遍歷目錄收集文件,使用線程池并發(fā)執(zhí)行 FileCleanTask,收集 FileCleanResult。

FileCleanerCLI:命令行入口,解析參數(shù)并根據(jù) ruleType 構建相應 ContentRule,調(diào)用 FileCleaner 并打印結果。

FileCleanerTest:JUnit5 測試類,使用 @TempDir 生成臨時目錄和文件,驗證各種規(guī)則下刪除、備份、編碼及多線程邏輯正確性。

7. 項目詳細總結

本項目以 Java 語言全面實現(xiàn)了“刪除文件中指定內(nèi)容”功能,涵蓋從規(guī)則抽象、任務封裝、并發(fā)調(diào)度、備份與原子替換、命令行工具、單元測試到項目文檔九大模塊,具備以下特點:

規(guī)則靈活:支持多種匹配規(guī)則,可輕松擴展;

健壯可靠:臨時文件+原子替換保障源文件不被損壞;

高效并發(fā):線程池并行處理多個文件,加快批量任務速度;

編碼兼容:可指定并保持文件原編碼;

易用易擴展:CLI 參數(shù)直觀,代碼模塊化便于二次開發(fā);

測試覆蓋:JUnit5 完整覆蓋功能和邊界場景,確保質(zhì)量。

8. 項目常見問題及解答

Q1:如何處理極大文件(>10GB)?

A:可將 BufferedReader 換為分塊映射(MappedByteBuffer)或使用流式處理結合塊讀取,減少內(nèi)存占用,并啟用更多線程。

Q2:匹配規(guī)則可否組合?

A:可通過自定義 CompositeRule,將多個 ContentRule 組合并按需取并(OR)或交(AND)。

Q3:如何可視化進度?

A:在 FileCleanTask 中定期記錄處理行數(shù),并通過回調(diào)或共享對象更新進度條。

Q4:如何處理不同文件類型(如二進制)?

A:當前僅針對文本文件;對二進制文件可改為按字節(jié)讀取并匹配二進制模式。

Q5:備份方式可以自定義嗎?

A:FileCleaner 可擴展參數(shù),允許自定義備份目錄、備份策略(時間戳、哈希等)。

9. 擴展方向與性能優(yōu)化

高性能 I/O:使用 AsynchronousFileChannel 或基于 Netty 的零拷貝傳輸,提升大文件處理速度;

多規(guī)則流水線:支持多種規(guī)則依次流水線執(zhí)行,減少重復 I/O;

分布式處理:結合 Apache Spark/Hadoop,將文件分布式存儲與并行處理;

GUI/Web 界面:提供 Swing/JavaFX 或 Spring Boot Web 前端,支持可視化配置與執(zhí)行;

熱規(guī)則加載:支持運行時加載或更新規(guī)則文件,動態(tài)生效;

監(jiān)控與審計:集成 Micrometer/Prometheus 監(jiān)控處理速率與錯誤率,并記錄審計日志。

到此這篇關于Java實現(xiàn)刪除文件中的指定內(nèi)容的文章就介紹到這了,更多相關Java刪除文件指定內(nèi)容內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • SpringBoot訪問不到controller的解決方案

    SpringBoot訪問不到controller的解決方案

    這篇文章主要介紹了SpringBoot訪問不到controller的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Gradle配置國內(nèi)鏡像加速指南(最全最詳細)

    Gradle配置國內(nèi)鏡像加速指南(最全最詳細)

    在使用 Gradle 進行 Java、Android 或其他 JVM 項目開發(fā)時,最令人頭疼的問題之一就是依賴下載速度慢,所以本文將提供最詳細最全面的 Gradle 配置國內(nèi)鏡像的指南,希望對大家有所幫助
    2025-08-08
  • Maven項目報錯:“?SLF4J:?Failed?to?load?class?“org.slf4j.impl.StaticLoggerBinder”的解決方案

    Maven項目報錯:“?SLF4J:?Failed?to?load?class?“org.slf4j.imp

    這篇文章主要給大家介紹了關于Maven項目報錯:“?SLF4J:?Failed?to?load?class?“org.slf4j.impl.StaticLoggerBinder?”的解決方案,文中給出詳細的解決思路與方法,需要的朋友可以參考下
    2022-03-03
  • SpringSecurity請求授權規(guī)則配置與注解詳解

    SpringSecurity請求授權規(guī)則配置與注解詳解

    這篇文章主要介紹了SpringSecurity請求授權規(guī)則配置與注解詳解,我們常使用@Secured與@PreAuthorize兩個注解在進入方法前進行角色、權限的控制,進入方法前數(shù)據(jù)的過濾@PreFilter注解偶爾會看到,需要的朋友可以參考下
    2023-12-12
  • Java數(shù)據(jù)類型超完整指南

    Java數(shù)據(jù)類型超完整指南

    Java數(shù)據(jù)類型可以分為基本數(shù)據(jù)類型和引用數(shù)據(jù)類型兩大類,這篇文章主要介紹了Java數(shù)據(jù)類型的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2026-03-03
  • 詳解Java如何使用責任鏈默認優(yōu)雅地進行參數(shù)校驗

    詳解Java如何使用責任鏈默認優(yōu)雅地進行參數(shù)校驗

    項目中參數(shù)校驗十分重要,它可以保護我們應用程序的安全性和合法性。這篇文章主要介紹了如何使用責任鏈默認優(yōu)雅地進行參數(shù)校驗,需要的可以參考一下
    2023-03-03
  • SpringMVC使用RESTful接口案例

    SpringMVC使用RESTful接口案例

    RESTful是一種web軟件風格,它不是標準也不是協(xié)議,它不一定要采用,只是一種風格,它倡導的是一個資源定位(url)及資源操作的風格,這篇文章主要介紹了SpringBoot使用RESTful接口
    2022-12-12
  • Java swing實現(xiàn)支持錄音等功能的鋼琴程序

    Java swing實現(xiàn)支持錄音等功能的鋼琴程序

    這篇文章主要為大家詳細介紹了Java swing實現(xiàn)鋼琴程序,支持錄音等功能的Java鋼琴源碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Java使用FTP上傳文件并模擬接受的方法

    Java使用FTP上傳文件并模擬接受的方法

    這篇文章主要介紹了Java使用FTP上傳文件并模擬接受的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-02-02
  • springmvc限流攔截器的示例代碼

    springmvc限流攔截器的示例代碼

    本篇文章主要介紹了springmvc限流攔截器的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12

最新評論

万安县| 德江县| 娄烦县| 深圳市| 清河县| 大邑县| 同仁县| 佛坪县| 巴青县| 汪清县| 平遥县| 宜兴市| 峨山| 长沙县| 通山县| 扎赉特旗| 永和县| 兴安县| 田东县| 兴国县| 沭阳县| 阿拉善右旗| 文登市| 龙胜| 龙海市| 简阳市| 无棣县| 万全县| 周宁县| 卓尼县| 文安县| 贵阳市| 冕宁县| 凤冈县| 桂平市| 景宁| 黄山市| 黄浦区| 巴彦淖尔市| 大丰市| 金塔县|