Mengekstrak Kandungan daripada Fail dalam Arkib Zip Menggunakan Apache Tika
Masalah:
Membangunkan program Java yang membaca kandungan fail yang disimpan dalam arkib zip menggunakan Apache Tika. Arkib zip mengandungi pelbagai format fail (seperti txt, pdf dan docx).
Penyelesaian:
Untuk mencapai kefungsian yang diingini, ikut langkah berikut:
Hilangkan Arkib Zip:
Panggil Apache Tika:
Ekstrak dan Tukar Kandungan:
Satukan Kandungan Ekstrak:
Coretan Kod (Diubah suai):
<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>
Nota: Adalah penting untuk mengubah suai kod untuk mengelakkan sbf ditimpa semasa setiap lelaran dan mengosongkannya di luar gelung untuk menyimpan gabungan kandungan daripada semua fail.
Atas ialah kandungan terperinci Bagaimanakah saya boleh mengekstrak kandungan daripada fail dalam arkib zip menggunakan Apache Tika dalam Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!