Çok sayıda dosya arasında sorunsuz bir şekilde nasıl arama yapacağınızı veya birden fazla klasördeki dosyalar içinde arama yapmanın karmaşıklığında nasıl gezineceğinizi hiç merak ettiniz mi? Tüm sorularınızın cevabını burada bulabilirsiniz. Bu makale, Java kullanarak farklı klasörlere yayılmış çeşitli dosyalarda birden çok metnin veya ifadenin nasıl aranacağını göstererek metin tarama alanını derinlemesine inceliyor.

Dosya ve Klasörlerde Metin Taramak için Java API

Bugün, klasörler arasında, çeşitli dosya formatlarındaki dosyalar içindeki birden çok metni aramak için GroupDocs.Search for Java API’sini kullanacağız. Bu kitaplık, Word belgeleri, elektronik tablolar, sunumlar, PDF dosyaları, İşaretleme dosyaları, e-Kitaplar, e-posta mesajları, One Note belgeleri ve ZIP arşivleri için çok çeşitli dosya formatlarındaki metni programlı olarak taramamıza olanak tanır. Belgeler desteklenen dosya biçimlerinin ayrıntılı listesini sağlar.

JAR dosyasını indirilenler bölümünden indirebilir veya Java uygulamalarınızdaki en son depo ve bağımlılık Maven yapılandırmalarını kullanabilirsiniz.

Java Kullanarak Klasörlerdeki Dosyalardaki Birden Çok Metni Arama

Java kullanarak birden çok klasör içindeki birden çok dosyada metin araması yapmak ve bulunan her belge için vurgulanmış HTML çıktı dosyaları oluşturmak için aşağıdaki adımları izleyin.

  • Belirtilen dizin klasörü yolu ile bir Index nesnesi oluşturun.
  • Ekleme yöntemini kullanarak ana belge klasörünü dizinleyin.
  • Birden çok terim veya kelime öbeği içeren bir arama sorgusu tanımlayın.
  • Arama yöntemini kullanarak metin taramayı gerçekleştirin ve sonuçları saklayın.
  • Arama sonuçlarında yineleyin:
    • Bulunan her belgeye getFoundDocument yöntemini kullanarak erişin.
    • Bulunan belgenin herhangi bir dosya bilgisine erişin veya yazdırın.
    • İstenilen format ve yol için bir OutputAdapter ayarlayın.
    • Belge için bir Vurgulayıcı oluşturun.
    • Vurgulama yöntemini kullanarak arama sonuçlarını vurgulayın ve bir HTML dosyasına aktarın.
// Java kullanarak Birden Çok Klasör içindeki çeşitli dosya formatlarındaki birden çok dosyada Metin Arama

// Belirtilen klasörde dizin oluşturma
Index index = new Index("path/for/indexingFolder");

// Belirtilen klasördeki belgeleri indeksleme
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);
}

Yukarıdaki kod toplu olarak birden fazla dosya içindeki belirli metinleri aramanıza ve bulunan her belge için vurgulanmış HTML çıktı dosyaları oluşturmanıza olanak tanır.

HTML formatında Vurgulanan Metin Arama Sonuçları

Metin Arama Sonuçlarını Yazdırma

Arama sorgusunun sonucundan, bulunan belgeler hakkında daha fazla bilgi çıkarabilirsiniz.

// Arama Sonuçlarını Yazdırma ===

for (int i = 0 ; i < result.getDocumentCount(); i++)
{
    FoundDocument document = result.getFoundDocument(i);
 
    // Arama Sonuçlarını Yazdırma ===========
    System.out.println("Occurrences: " + document.getOccurrenceCount());
    for (FoundDocumentField field : document.getFoundFields()) {
        System.out.println("\tField: " + field.getFieldName());
        System.out.println("\tOccurrences: " + field.getOccurrenceCount());

        // Bulunan terimleri yazdırma
        if (field.getTerms() != null) {
            for (int k = 0; k < field.getTerms().length; k++) {
                System.out.println("\t\t" + field.getTerms()[k] + " - " + field.getTermsOccurrences()[k]);
            }
        }
        // Bulunan ifadeleri yazdırma
        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 ve TXT dosyalarından elde edilen yukarıdaki arama sonuçlarının yazdırılmasının çıktısı aşağıda olacaktır:

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

Kodu tamamla

Birden çok dosya ve klasördeki metin dizelerini ve tümceciklerini toplu olarak arayan Java kodunun tamamı aşağıda verilmiştir:

// Java kullanarak Birden Çok Klasör içindeki çeşitli dosya formatlarındaki birden çok dosyada Metin Arama

// Belirtilen klasörde dizin oluşturma
Index index = new Index("path/for/indexingFolder");

// Belirtilen klasördeki belgeleri indeksleme
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);
  
    // Arama Sonuçlarını Yazdırma ===========
    System.out.println("Occurrences: " + document.getOccurrenceCount());
    for (FoundDocumentField field : document.getFoundFields()) {
        System.out.println("\tField: " + field.getFieldName());
        System.out.println("\tOccurrences: " + field.getOccurrenceCount());

        // Bulunan terimleri yazdırma
        if (field.getTerms() != null) {
            for (int k = 0; k < field.getTerms().length; k++) {
                System.out.println("\t\t" + field.getTerms()[k] + " - " + field.getTermsOccurrences()[k]);
            }
        }
        // Bulunan ifadeleri yazdırma
        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]);
            }
        }
    }  
}

Ücretsiz Lisans veya Ücretsiz Deneme Alma

Ücretsiz lisans

Bu kütüphaneyi kısıtlama olmadan keşfetmek için ücretsiz geçici lisans alabilirsiniz.

Ücretsiz deneme

İndirilenler bölümünden [Ücretsiz deneme sürümünü indirin2.

Dosya ve Klasörler İçinde Arama Yapmak için Java API

Çözüm

Bu makalede, Java kullanarak birden çok klasörde birden çok dosyadaki birden çok metni aramak için metin taramayı inceledik. Arama sorgusundan başlayarak birden fazla dosya ve klasörde arama yaptık ve bulunan sonuçları ilgili HTML dosyalarında vurguladık.

Ayrıntılı API bilgileri için okuyucuların belgelere başvurmaları önerilir. Sorular ve daha fazla tartışma sağlanan foruma yönlendirilebilir.

Ayrıca bakınız