有没有想过如何无缝搜索大量文件,或者如何解决跨多个文件夹的文件内搜索的复杂性?您所有的疑问都可以在这里找到答案。本文深入研究文本扫描领域,展示如何使用 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 信息,鼓励读者查阅文档。问题和进一步讨论可以直接到提供的论坛

也可以看看