Ви коли-небудь замислювалися над тим, як безперешкодно шукати численні файли, чи, можливо, впоратися зі складністю пошуку файлів у кількох папках? Тут можна знайти відповіді на всі ваші запитання. Ця стаття заглиблюється в сферу сканування тексту, демонструючи, як шукати кілька текстів або фраз у різних файлах, розкиданих у різноманітних папках, за допомогою Java.
Java API для сканування тексту між файлами та папками
Сьогодні ми використаємо API GroupDocs.Search for Java для пошуку кількох текстів у файлах різних форматів у папках. Ця бібліотека дозволяє нам програмно сканувати текст у широкому діапазоні форматів файлів для документів Word, електронних таблиць, презентацій, файлів PDF, файлів розмітки, електронних книг, повідомлень електронної пошти, документів One Note та архівів ZIP. У документації наведено детальний список підтримуваних форматів файлів.
Ви можете завантажити файл JAR із розділу завантажень або використати останнє сховище та конфігурації залежностей Maven у своїх програмах Java.
Пошук кількох текстів у файлах у папках за допомогою Java
Виконайте наступні дії, щоб виконати текстовий пошук у кількох файлах у кількох папках за допомогою Java та створити виділені вихідні файли HTML для кожного знайденого документа.
- Створіть об’єкт Index із указаним шляхом до папки індексу.
- Проіндексуйте папку батьківського документа за допомогою методу add.
- Визначте пошуковий запит із кількома термінами чи фразами.
- Виконати сканування тексту методом пошуку та зберегти результати.
- Перегляньте результати пошуку:
- Отримайте доступ до кожного знайденого документа за допомогою методу getFoundDocument.
- Доступ або друк будь-якої інформації про файл для знайденого документа.
- Налаштуйте OutputAdapter для потрібного формату та шляху.
- Створіть Highlighter для документа.
- Виділіть і виведіть результати пошуку у файл 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 для кожного знайденого документа.

Друк результатів текстового пошуку
З результату пошукового запиту можна додатково отримати інформацію про знайдені документи.
// Друк результатів пошуку ===
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. Починаючи з пошукового запиту, ми здійснили пошук у кількох файлах і папках і виділили знайдені результати у відповідних файлах HTML.
Для отримання детальної інформації про API читачам пропонується ознайомитися з документацією. Запитання та подальші обговорення можна направляти на наданий форум.