Maison > Java > javaDidacticiel > le corps du texte

Comment puis-je extraire le contenu de fichiers dans une archive zip à l'aide d'Apache Tika en Java ?

Barbara Streisand
Libérer: 2024-10-30 03:33:28
original
283 Les gens l'ont consulté

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

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

Problème :

Développer un programme Java qui lit le contenu des fichiers stockés dans une archive zip à l'aide d'Apache Tika. L'archive zip contient différents formats de fichiers (tels que txt, pdf et docx).

Solution :

Pour obtenir la fonctionnalité souhaitée, suivez ces étapes :

  1. Analyser l'archive Zip :

    • Utilisez ZipInputStream pour parcourir les entrées de l'archive zip.
    • Extraire uniquement les fichiers qui vous intéressent (par exemple, txt, pdf, docx).
  2. Invoquez Apache Tika :

    • Créez un instance d'un gestionnaire de texte (par exemple, BodyContentHandler) pour capturer le contenu extrait.
    • Instancier un analyseur (par exemple, AutoDetectParser) pour identifier le type de fichier et appliquer la méthode d'analyse appropriée.
  3. Extraire et convertir le contenu :

    • Analyser chaque fichier extrait via l'analyseur, en extrayant le contenu dans le gestionnaire de texte.
    • Convertir toutes les données binaires ou non prises en charge dans un format String.
  4. Consolider le contenu extrait :

    • Stockez le contenu extrait de tous les fichiers dans une liste temporaire.
    • Combinez le contenu des fichiers individuels en une seule chaîne pour un traitement ou un affichage ultérieur.

Extrait de code (Modifié) :

<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>
Copier après la connexion

Remarque : Il est important de modifier le code pour éviter que le sbf ne soit écrasé à chaque itération et de l'effacer en dehors de la boucle pour stocker le contenu de tous les fichiers.

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