首頁 > Java > java教程 > 主體

如何使用 Apache Tika 從 ZIP 檔案中的檔案中提取內容?

Susan Sarandon
發布: 2024-10-29 06:59:02
原創
302 人瀏覽過

How to extract content from files within a ZIP archive using Apache Tika?

使用Apache Tika 從Zip 中的檔案中擷取內容

滿足您使用下列指令從Zip 檔案中的檔案讀取和提取內容的要求Apache Tika,您需要對目前程式碼進行一些調整。雖然您的方法基本上是正確的,但問題在於獲取 zip 中每個檔案的 InputStream。

這是解決此問題的程式碼的更新版本:

<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.ZipFile;

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.xml.sax.SAXException;

public class SampleZipExtractNew {

    public static void main(String[] args) throws IOException {

        List<String> tempString = new ArrayList<>();
        StringBuffer sbf = new StringBuffer();

        File file = new File("C:\Users\xxx\Desktop\abc.zip");
        ZipFile zipFile = new ZipFile(file);

        Enumeration<? extends ZipEntry> entries = zipFile.entries();

        BodyContentHandler textHandler = new BodyContentHandler();
        Metadata metadata = new Metadata();

        Parser parser = new AutoDetectParser();

        while (entries.hasMoreElements()) {

            ZipEntry entry = entries.nextElement();

            try (InputStream inputStream = zipFile.getInputStream(entry)) {

                if (entry.getName().endsWith(".txt") || entry.getName().endsWith(".pdf") || entry.getName().endsWith(".docx")) {
                    parser.parse(inputStream, textHandler, metadata, new ParseContext());
                    tempString.add(textHandler.toString());
                }
            }
        }

        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());
        }
    }
}</code>
登入後複製

在此修訂版中程式碼:

  • 我們使用要處理的zip 檔案初始化ZipFile 實例。
  • 我們使用枚舉迭代 ZIP 檔案的條目,該枚舉提供對每個條目的存取。
  • 對於每個以「.txt」、「.pdf」或「.docx」結尾的條目,我們會擷取其InputStream。
  • 在InputStream try-with-resources 區塊中,我們呼叫Apache Tika 解析器解析內容並提取文字。
  • 提取的文字將添加到列表中以進行進一步處理,例如附加到 StringBuffer 中以進行合併提取。

以上是如何使用 Apache Tika 從 ZIP 檔案中的檔案中提取內容?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!