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 :
Analyser l'archive Zip :
Invoquez Apache Tika :
Extraire et convertir le contenu :
Consolider le contenu extrait :
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>
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!