有沒有想過如何無縫搜尋大量文件,或如何解決跨多個資料夾的文件內搜尋的複雜性?您所有的疑問都可以在這裡找到答案。本文深入研究文字掃描領域,展示如何使用 Java 搜尋分佈在不同資料夾中的各種文件中的多個文字或短語。

用於跨文件和資料夾掃描文字的 Java API

今天,我們將使用 GroupDocs.Search for Java API 跨資料夾搜尋各種檔案格式的檔案中的多個文字。該庫允許我們以程式設計方式掃描多種文件格式中的文本,包括 Word 文件、電子表格、簡報、PDF 文件、標記文件、電子書、電子郵件、One Note 文件和 ZIP 存檔。該文件提供了支援的文件格式的詳細清單

您可以從下載部分下載 JAR 文件,或在 Java 應用程式中使用最新儲存庫和依賴項 Maven 配置

使用 Java 跨資料夾搜尋文件中的多個文本

請依照下列步驟使用 Java 在多個資料夾內的多個文件中執行文字搜索,並為每個找到的文件產生突出顯示的 HTML 輸出檔。

  • 使用指定的索引資料夾路徑建立 Index 物件。
  • 使用 add 方法索引父文檔資料夾。
  • 使用多個術語或短語定義搜尋查詢。
  • 使用搜尋方法執行文字掃描並儲存結果。
  • 迭代搜尋結果:
    • 使用 getFoundDocument 方法存取每個找到的文件。
    • 存取或列印找到的文件的任何文件資訊。
    • 為所需的格式和路徑設定 OutputAdapter
    • 為文件建立一個螢光筆
    • 使用highlight方法突出顯示搜尋結果並將其輸出到HTML檔案。
// 使用 Java 在多個資料夾中的各種文件格式的多個文件中進行文字搜尋

// 在指定資料夾中建立索引
Index index = new Index("path/for/indexingFolder");

// 從指定資料夾索引文檔
index.add("path/parent-folder/");

String query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.search(query);

for (int i = 0 ; i < result.getDocumentCount(); i++)
{
    FoundDocument document = result.getFoundDocument(i);
    System.out.println("====================================");
    System.out.println("File Name: " + document.getDocumentInfo().getFilePath());

    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "/path/Highlighted-" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.highlight(document, highlighter);
}

上述程式碼共同使您能夠在多個文件中搜尋特定文本,並為每個找到的文件產生突出顯示的 HTML 輸出檔。

HTML 格式的突出顯示文字搜尋結果

列印文字搜尋結果

從搜尋查詢的結果中,您可以進一步提取有關找到的文件的資訊。

// 列印搜尋結果 ===

for (int i = 0 ; i < result.getDocumentCount(); i++)
{
    FoundDocument document = result.getFoundDocument(i);
 
    // 列印搜尋結果 ===========
    System.out.println("Occurrences: " + document.getOccurrenceCount());
    for (FoundDocumentField field : document.getFoundFields()) {
        System.out.println("\tField: " + field.getFieldName());
        System.out.println("\tOccurrences: " + field.getOccurrenceCount());

        // 列印找到的術語
        if (field.getTerms() != null) {
            for (int k = 0; k < field.getTerms().length; k++) {
                System.out.println("\t\t" + field.getTerms()[k] + " - " + field.getTermsOccurrences()[k]);
            }
        }
        // 列印找到的短語
        if (field.getTermSequences() != null) {
            for (int k = 0; k < field.getTermSequences().length; k++) {
                String[] terms = field.getTermSequences()[k];
                String sequence = "";
                for (String term : terms) {
                    sequence += term + " ";
                }
                System.out.println("\t\t" + sequence + " - " + field.getTermSequencesOccurrences()[k]);
            }
        }
    }
}

以下是列印上述從 DOCX、PDF 和 TXT 檔案中獲得的搜尋結果的輸出:

File Name: Lorem ipsum.docx
Occurrences: 101
	Field: filename
	Occurrences: 1
		lorem ipsum  - 1
	Field: content
	Occurrences: 100
		non - 94
		lorem ipsum  - 6
====================================
File Name: Lorem ipsum.pdf
Occurrences: 60
	Field: filename
	Occurrences: 1
		lorem ipsum  - 1
	Field: content
	Occurrences: 59
		non - 53
		lorem ipsum  - 6
====================================
File Name: English.txt
Occurrences: 39
	Field: content
	Occurrences: 39
		water - 39

完整程式碼

以下是集體搜尋多個文件和資料夾中的文字字串和短語的完整 Java 程式碼:

// 使用 Java 在多個資料夾中的各種文件格式的多個文件中進行文字搜尋

// 在指定資料夾中建立索引
Index index = new Index("path/for/indexingFolder");

// 從指定資料夾索引文檔
index.add("path/parent-folder/");

String query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.search(query);

for (int i = 0 ; i < result.getDocumentCount(); i++)
{
    FoundDocument document = result.getFoundDocument(i);
    System.out.println("====================================");
    System.out.println("File Name: " + document.getDocumentInfo().getFilePath());

    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "/path/Highlighted-" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.highlight(document, highlighter);
  
    // 列印搜尋結果===========
    System.out.println("Occurrences: " + document.getOccurrenceCount());
    for (FoundDocumentField field : document.getFoundFields()) {
        System.out.println("\tField: " + field.getFieldName());
        System.out.println("\tOccurrences: " + field.getOccurrenceCount());

        // 列印找到的術語
        if (field.getTerms() != null) {
            for (int k = 0; k < field.getTerms().length; k++) {
                System.out.println("\t\t" + field.getTerms()[k] + " - " + field.getTermsOccurrences()[k]);
            }
        }
        // 列印找到的短語
        if (field.getTermSequences() != null) {
            for (int k = 0; k < field.getTermSequences().length; k++) {
                String[] terms = field.getTermSequences()[k];
                String sequence = "";
                for (String term : terms) {
                    sequence += term + " ";
                }
                System.out.println("\t\t" + sequence + " - " + field.getTermSequencesOccurrences()[k]);
            }
        }
    }  
}

取得免費許可證或免費試用

免費許可證

要不受限制地探索這個庫,您可以獲得免費臨時許可證

免費試用

從下載部分下載免費試用版

用於在檔案和資料夾中搜尋的 Java API

結論

在本文中,我們剛剛探索了文字掃描,以使用 Java 在多個資料夾中的多個檔案中搜尋多個文字。從搜尋查詢開始,我們在多個文件和資料夾中進行搜索,並在相應的 HTML 文件中突出顯示找到的結果。

有關詳細的 API 信息,鼓勵讀者查閱文件。問題和進一步討論可以直接到提供的論壇

也可以看看