Heim > Java > javaLernprogramm > Wie kann ich mit Apache Tika in Java Inhalte aus Dateien in einem Zip-Archiv extrahieren?

Wie kann ich mit Apache Tika in Java Inhalte aus Dateien in einem Zip-Archiv extrahieren?

Barbara Streisand
Freigeben: 2024-10-30 03:33:28
Original
291 Leute haben es durchsucht

How can I extract content from files within a zip archive using Apache Tika in Java?

Inhalte aus Dateien in einem Zip-Archiv mit Apache Tika extrahieren

Problem:

Entwickeln ein Java-Programm, das mithilfe von Apache Tika den Inhalt von Dateien liest, die in einem Zip-Archiv gespeichert sind. Das Zip-Archiv enthält verschiedene Dateiformate (z. B. TXT, PDF und DOCX).

Lösung:

Um die gewünschte Funktionalität zu erreichen, befolgen Sie diese Schritte:

  1. Zip-Archiv analysieren:

    • Verwenden Sie ZipInputStream, um die Einträge im ZIP-Archiv zu durchlaufen.
    • Nur ​​extrahieren die Dateien von Interesse (z. B. txt, pdf, docx).
  2. Apache Tika aufrufen:

    • Erstellen Sie eine Instanz eines Texthandlers (z. B. BodyContentHandler) zum Erfassen des extrahierten Inhalts.
    • Instanziieren eines Parsers (z. B. AutoDetectParser), um den Dateityp zu identifizieren und die entsprechende Parsing-Methode anzuwenden.
  3. Inhalt extrahieren und konvertieren:

    • Parsen Sie jede extrahierte Datei durch den Parser und extrahieren Sie den Inhalt in den Texthandler.
    • Konvertieren alle binären oder nicht unterstützten Daten in ein String-Format.
  4. Extrahierten Inhalt konsolidieren:

    • Speichern Sie den extrahierten Inhalt von allen die Dateien in einer temporären Liste.
    • Fügen Sie den Inhalt der einzelnen Dateien in einem einzigen String zur weiteren Verarbeitung oder Anzeige zusammen.

Code-Snippet (Geändert):

<code class="java">import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.BodyContentHandler;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.Parser;
import org.apache.tika.sax.BodyContentHandlerFactory;
import org.xml.sax.SAXException;

public class ImprovedZipExtractor {

    public static void main(String[] args) {
        List<String> tempString = new ArrayList<>();
        StringBuffer sbf = new StringBuffer();

        File file = new File("C:\Users\xxx\Desktop\abc.zip");
        InputStream input;

        try {
            input = new FileInputStream(file);
            ZipInputStream zip = new ZipInputStream(input);
            ZipEntry entry = zip.getNextEntry();

            Metadata metadata = new Metadata();
            Parser parser = new AutoDetectParser();

            while (entry != null) {
                if (entry.getName().endsWith(".txt") || entry.getName().endsWith(".pdf")
                        || entry.getName().endsWith(".docx")) {
                    System.out.println("entry=" + entry.getName() + " " + entry.getSize());
                    parser.parse(zip, new BodyContentHandlerFactory(BodyContentHandlerFactory.INCLUDE_ENTITY_ROOT,
                            false).getNewBodyContentHandler(), metadata, new ParseContext());
                    tempString.add(sbf.toString());
                }
                entry = zip.getNextEntry();
            }
            zip.close();
            input.close();

            for (String text : tempString) {
                System.out.println("Apache Tika - Converted input string : " + text);
                sbf.append(text);
                System.out.println("Final text from all the three files " + sbf.toString());
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (TikaException e) {
            e.printStackTrace();
        }
    }
}</code>
Nach dem Login kopieren

Hinweis: Es ist wichtig, den Code zu ändern, um zu verhindern, dass der SBF während jeder Iteration überschrieben wird, und ihn außerhalb der Schleife zu löschen, um die Verkettung zu speichern Inhalt aus allen Dateien.

Das obige ist der detaillierte Inhalt vonWie kann ich mit Apache Tika in Java Inhalte aus Dateien in einem Zip-Archiv extrahieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage