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:
Zip-Archiv analysieren:
Apache Tika aufrufen:
Inhalt extrahieren und konvertieren:
Extrahierten Inhalt konsolidieren:
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>
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!