У меня есть программа Java 8, которая перемещается по дереву каталогов из предоставленного пользователем узла, ища файлы, соответствующие списку пользовательских шаблонов имен файлов.Есть ли способ заставить tika останавливать синтаксический анализ файла после того, как совпадение найдено?
Список сопоставленных файлов можно отфильтровать с помощью дополнительного String
для поиска. Код проверяет эту строку, используя итоговый результат . Это очень плохо, когда огромные файлы находятся вдоль прогулки по дереву.
Но все равно. Как только найденная строка найдена, мы теряем время, анализируя остальную часть файла.
Есть ли способ, чтобы tika останавливал разбор файла после того, как совпадение найдено?
EDIT
код, что программа основана на:
package org.apache.tika.example;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.mime.MimeTypeException;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.sax.BodyContentHandler;
import org.xml.sax.SAXException;
public class ParsingExample {
public static boolean contains(File file, String s) throws MalformedURLException,
IOException, MimeTypeException, SAXException, TikaException
{
InputStream stream = new FileInputStream(file);
AutoDetectParser parser = new AutoDetectParser();
BodyContentHandler handler = new BodyContentHandler(-1);
Metadata metadata = new Metadata();
try
{
parser.parse(stream, handler, metadata);
return handler.toString().toLowerCase().contains(s.toLowerCase());
}
catch (IOException | SAXException | TikaException e)
{
System.out.println(file + ": " + e + "\n");
return false;
}
}
public static void main(String[] args)
{
try
{
System.out.println("File " + filename + " contains <" + searchString + "> : " + contains(new File(filename), searchString));
}
catch (IOException | SAXException | TikaException ex)
{
System.out.println("Error: " + ex);
}
}
static String parseExample = ":(";
static String searchString = "test";
static String filename = "test.doc";
}
Parser.parser
возвращает весь текст в файле для BodyContentHandler
handler
. Для разработчика синтаксического анализа нет петли. Нет, что я знаю; следовательно, вопрос.
EDIT 2
То, что я действительно хочу знать, я думаю, есть ли там метод ТИКА, который читает только n
символы из файла, а не все. Тогда я мог бы придерживаться цикла вокруг него и выйти, если будет найдена строка поиска.
вы можете предоставить некоторый код? – yelliver
У вашего кода установлен флаг, который завершает цикл? Выбросить исключение? – Gagravarr
Обратитесь к * EDIT * в OQ. – DSlomer64