Rumah > Java > javaTutorial > Bagaimanakah saya boleh mengekstrak kandungan daripada fail dalam arkib zip menggunakan Apache Tika dalam Java?

Bagaimanakah saya boleh mengekstrak kandungan daripada fail dalam arkib zip menggunakan Apache Tika dalam Java?

Barbara Streisand
Lepaskan: 2024-10-30 03:33:28
asal
293 orang telah melayarinya

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

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:

  1. Hilangkan Arkib Zip:

    • Gunakan ZipInputStream untuk mengulangi entri dalam arkib zip.
    • Ekstrak sahaja fail yang diminati (cth., txt, pdf, docx).
  2. Panggil Apache Tika:

    • Buat contoh pengendali teks (cth., BodyContentHandler) untuk menangkap kandungan yang diekstrak.
    • Segerakan penghurai (cth., AutoDetectParser) untuk mengenal pasti jenis fail dan menggunakan kaedah penghuraian yang sesuai.
  3. Ekstrak dan Tukar Kandungan:

    • Hilang setiap fail yang diekstrak melalui penghurai, mengekstrak kandungan ke dalam pengendali teks.
    • Tukar sebarang data perduaan atau tidak disokong ke dalam format Rentetan.
  4. Satukan Kandungan Ekstrak:

    • Simpan kandungan yang diekstrak daripada semua fail ke dalam senarai sementara.
    • Gabungkan kandungan fail individu ke dalam satu Rentetan untuk pemprosesan atau paparan selanjutnya.

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan