Maison > Java > javaDidacticiel > Comment extraire le contenu de fichiers dans une archive ZIP à l'aide d'Apache Tika ?

Comment extraire le contenu de fichiers dans une archive ZIP à l'aide d'Apache Tika ?

Susan Sarandon
Libérer: 2024-10-29 06:59:02
original
511 Les gens l'ont consulté

How to extract content from files within a ZIP archive using Apache Tika?

Extraire du contenu de fichiers dans une archive Zip à l'aide d'Apache Tika

Pour répondre à votre besoin de lire et d'extraire le contenu de fichiers dans une archive Zip à l'aide Apache Tika, vous devrez apporter quelques ajustements à votre code actuel. Bien que votre approche soit en grande partie correcte, le problème réside dans l'obtention du InputStream pour chaque fichier du zip.

Voici une version mise à jour de votre code qui résout ce problème :

<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.ZipFile;

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.xml.sax.SAXException;

public class SampleZipExtractNew {

    public static void main(String[] args) throws IOException {

        List<String> tempString = new ArrayList<>();
        StringBuffer sbf = new StringBuffer();

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

        Enumeration<? extends ZipEntry> entries = zipFile.entries();

        BodyContentHandler textHandler = new BodyContentHandler();
        Metadata metadata = new Metadata();

        Parser parser = new AutoDetectParser();

        while (entries.hasMoreElements()) {

            ZipEntry entry = entries.nextElement();

            try (InputStream inputStream = zipFile.getInputStream(entry)) {

                if (entry.getName().endsWith(".txt") || entry.getName().endsWith(".pdf") || entry.getName().endsWith(".docx")) {
                    parser.parse(inputStream, textHandler, metadata, new ParseContext());
                    tempString.add(textHandler.toString());
                }
            }
        }

        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());
        }
    }
}</code>
Copier après la connexion

Dans cette version révisée code :

  • Nous initialisons une instance ZipFile avec le fichier zip à traiter.
  • Nous parcourons les entrées du fichier ZIP à l'aide d'une énumération, qui donne accès à chaque entrée.
  • Pour chaque entrée qui se termine par ".txt", ".pdf" ou ".docx", nous récupérons son InputStream.
  • Dans le bloc Try-with-resources d'InputStream, nous invoquons le Analyseur Apache Tika pour analyser le contenu et extraire le texte.
  • Le texte extrait est ajouté à une liste pour un traitement ultérieur, par exemple en l'ajoutant à un StringBuffer pour une extraction consolidée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal