如何在 Java 中使用 GroupDocs.Search 清理目錄

如果您需要在自動化文件索引和重新命名的同時 clean directory java,您來對地方了。手動處理檔案搬移、刪除以及索引更新容易出錯且耗時。在本教學中,您將看到 Java 如何清理資料夾、建立可搜尋的索引、重新命名檔案,並使用 GroupDocs.Search for Java 保持所有內容同步。

快速回答

  • What does “clean directory java” mean? 使用 Java 程式碼刪除目標目錄內的所有檔案和子資料夾。
  • Which library creates the searchable index? GroupDocs.Search for Java。
  • How do I rename a document and keep the index updated? 使用 File.renameTo(),然後透過 Notification.createRenameNotification 通知索引。
  • Can I copy files after cleaning the folder? 可以 — Java Streams 可以在保留索引的同時複製檔案。
  • Is a license required for production? 商業使用需要有效的 GroupDocs.Search 授權。

什麼是清理目錄?

How to clean directory 指以程式方式從指定資料夾中移除所有檔案和子目錄。此步驟可確保過時或重複的資料不會干擾後續的索引或複製作業。它通常在批次處理、資料遷移或重建搜尋索引之前使用,以保證僅有最新內容。透過自動化清理,開發人員可避免手動錯誤,並將此步驟整合至 CI 流程中。

為何自動化文件索引與重新命名?

自動化這些任務可減少人工操作、降低人為錯誤,並確保可搜尋的索引始終反映當前檔案系統的狀態。GroupDocs.Search 能索引超過 50+ file formats,且可在不將整個檔案載入記憶體的情況下處理數百頁的文件,提供快速且可靠的搜尋結果。

前置條件

  • GroupDocs.Search for Java(版本 25.4 或更新)— 支援 50+ 輸入與輸出格式。
  • JDK 8 + 以及如 IntelliJ IDEA 或 Eclipse 等 IDE。
  • 基本的 Java 知識,特別是檔案 I/O。

設定 GroupDocs.Search for Java

Maven 依賴

Add the repository and dependency to your pom.xml:

<repositories>
   <repository>
      <id>repository.groupdocs.com</id>
      <name>GroupDocs Repository</name>
      <url>https://releases.groupdocs.com/search/java/</url>
   </repository>
</repositories>

<dependencies>
   <dependency>
      <groupId>com.groupdocs</groupId>
      <artifactId>groupdocs-search</artifactId>
      <version>25.4</version>
   </dependency>
</dependencies>

直接下載

Alternatively, download the latest version from GroupDocs.Search for Java releases.

授權

取得免費試用、臨時評估授權,或購買正式授權以供正式環境使用。

基本初始化

Create an Index instance that will hold the searchable data:

import com.groupdocs.search.Index;

public class Main {
    public static void main(String[] args) {
        String indexFolder = "YOUR_OUTPUT_DIRECTORY/DocumentIndexingAndRenaming/Index";
        Index index = new Index(indexFolder);
    }
}

Definition anchor: Index 類別是 GroupDocs.Search 的核心元件,負責儲存可搜尋的中繼資料,並提供新增、更新或刪除文件的方法。

如何在 Java 中清理目錄?

載入目標資料夾,遍歷其檔案樹,並以相反順序刪除每個項目。此方法可確保先刪除檔案再刪除其父目錄,避免「目錄非空」錯誤。

Files.walk() 方法會回傳一個 Path 物件的串流,代表給定根目錄下的每個檔案與子目錄。使用 Comparator.reverseOrder() 進行排序,可確保較深的路徑先於其父層處理,從而安全刪除。

import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class DirectoryCleaningAndFileCopying {
    public static void main(String[] args) throws IOException {
        String targetDirectory = "YOUR_DOCUMENT_DIRECTORY/DocumentIndexingAndRenaming/Documents/";

        Files.walk(Paths.get(targetDirectory))
             .map(Path::toFile)
             .sorted((o1, o2) -> -o1.compareTo(o2))
             .forEach(File::delete);
    }
}

說明:

  • Files.walk() 會遞迴列舉每個檔案與子資料夾。
  • 使用 Comparator.reverseOrder() 進行排序可確保正確的刪除順序。

如何在 Java 中重新命名檔案同時保持索引正確?

使用 Files.move()(或在簡單情況下使用 File.renameTo())重新命名實體檔案,然後向索引發送重新命名通知,以確保搜尋結果保持正確。

Files.move() 會原子性地搬移或重新命名檔案,較 File.renameTo() 在跨平台上提供更好的可靠性。

import com.groupdocs.search.Notification;

public class DocumentIndexingAndRenaming {
    public static void main(String[] args) {
        // Define paths for renaming
        String oldDocumentPath = "YOUR_DOCUMENT_DIRECTORY/DocumentIndexingAndRenaming/Documents/Lorem ipsum.txt";
        String newDocumentPath = "YOUR_DOCUMENT_DIRECTORY/DocumentIndexingAndRenaming/Documents/Lorem ipsum renamed.txt";

        java.io.File fileToRename = new java.io.File(oldDocumentPath);
        boolean renameSuccessful = fileToRename.renameTo(new java.io.File(newDocumentPath));

        if (renameSuccessful) {
            // Notify the index about the renaming
            Notification notification = Notification.createRenameNotification(oldDocumentPath, newDocumentPath);
            index.notifyIndex(notification);

            // Update the index to reflect changes
            index.update();
        }
    }
}

Definition anchor: Notification.createRenameNotification() 會產生一個通知物件,告訴 GroupDocs.Search 文件名稱已變更,促使索引更新其內部參照。

如何在清理目錄後使用 Java 複製檔案?

資料夾清理完成後,您可以使用 Java Streams 複製新檔案進入。複製操作會覆寫已存在的檔案,確保資料夾內包含每個文件的最新版本。此步驟通常會接著將新複製的檔案加入索引,使其立即可搜尋。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;

public class DirectoryCleaningAndFileCopying {
    public static void main(String[] args) throws IOException {
        String sourceDirectory = "YOUR_SOURCE_DIRECTORY/ExampleFiles/";
        String targetDirectory = "YOUR_DOCUMENT_DIRECTORY/DocumentIndexingAndRenaming/Documents/";

        try (Stream<Path> paths = Files.walk(Paths.get(sourceDirectory))) {
            paths.filter(Files::isRegularFile)
                 .forEach(sourcePath -> {
                     Path destPath = Paths.get(targetDirectory + sourcePath.getFileName().toString());
                     try {
                         Files.copy(sourcePath, destPath, java.nio.file.StandardCopyOption.REPLACE_EXISTING);
                     } catch (IOException e) {
                         e.printStackTrace();
                     }
                 });
        }
    }
}

說明:

  • 串流僅過濾普通檔案,然後將每個檔案複製到目標目錄,必要時會覆寫已存在的檔案。

實作指南

1. 新增文件至索引(建立可搜尋的索引)

將來源資料夾加入索引,使每個文件即時可搜尋。

import com.groupdocs.search.Index;

public class DocumentIndexingAndRenaming {
    public static void main(String[] args) {
        String indexFolder = "YOUR_OUTPUT_DIRECTORY/DocumentIndexingAndRenaming/Index";
        String documentFolder = "YOUR_DOCUMENT_DIRECTORY/DocumentIndexingAndRenaming/Documents/";

        // Create an Index
        Index index = new Index(indexFolder);

        // Add documents to the index
        index.add(documentFolder);
    }
}

說明:

  • indexFolder — 索引檔案的存放位置。
  • documentFolder — 包含您想要讓其可搜尋檔案的來源資料夾。

實務應用

  • Enterprise document management — 為數千份合約自動化索引,並保持檔名同步。
  • Legal firms — 快速重新命名案件檔案,同時保留可搜尋內容。
  • Content management systems — 使用清理目錄模式刷新媒體資料夾,免除手動清理。

效能考量

  • Index size — 若索引變大,請定期壓縮;GroupDocs.Search 提供 compact() 方法,可將儲存空間減少最高 30 %。
  • Memory usage — 將檔案分批處理(每批 500 – 1 000),以避免 OutOfMemoryError。
  • Concurrency — 對於大量作業,可考慮使用 Java 的 ExecutorService 來平行化清理、複製與索引,於多核心伺服器上可將總執行時間縮短約 40 %。

常見問題與技巧

IssueCauseFix
重新命名失敗檔案被鎖定或路徑無效確保檔案未在其他地方開啟;使用 Files.move 以獲得更可靠的重新命名。
索引未更新未發送通知務必先呼叫 index.notifyIndex(notification),再呼叫 index.update()。
複製後搜尋結果過時索引仍指向舊檔案重新將目標資料夾加入索引,或在複製後呼叫 index.update()。
大型資料夾清理緩慢單執行緒遍歷使用平行串流或將資料夾分成較小批次。
權限錯誤作業系統權限不足以適當的權限執行 JVM,或調整資料夾 ACL。

常見問答

Q: 我可以清理包含子資料夾的目錄嗎?
A: 可以。Files.walk() 方法會遞迴刪除所有巢狀的檔案與資料夾。

Q: 每次重新命名後需要重新建構整個索引嗎?
A: 不需要。發送重新命名通知並呼叫 index.update() 即可。

Q: 在遇到效能限制前,我能清理多大的資料夾?
A: 取決於 JVM 記憶體;將處理分成較小批次或使用串流可協助管理大型資料集。

Q: GroupDocs.Search 可免費用於開發嗎?
A: 提供免費試用,但正式環境需付費授權。

Q: 我可以將此方法套用於其他檔案類型(例如 PDF、DOCX)嗎?
A: 當然可以。GroupDocs.Search 支援多種格式,只需將包含這些檔案的資料夾加入索引即可。


最後更新: 2026-08-05
測試版本: GroupDocs.Search 25.4
作者: GroupDocs

相關教學