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
379 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!

source:php.cn
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