首頁 > Java > java教程 > 如何使用 Java 中的 Apache Tika 從 zip 檔案中的檔案中提取內容?

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

Barbara Streisand
發布: 2024-10-30 03:33:28
原創
293 人瀏覽過

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

使用Apache Tika 從Zip 存檔中的文件中提取內容

問題:

開發一個Java 程序,利用Apache Tika 讀取儲存在zip 檔案中的檔案內容。 zip 檔案包含各種檔案格式(例如 txt、pdf 和 docx)。

解決方案:

要實現所需的功能,請依照下列步驟操作:

  1. 解析Zip 檔案:

    • 利用ZipInputStream 迭代zip 檔案中的條目。
    • 只提取感興趣的檔案(例如 txt、pdf、docx)。
  2. 呼叫Apache Tika:

    • 建立一個用於擷取擷取的內容的文字處理程序(例如BodyContentHandler)的實例。
    • 實例化解析器(例如 AutoDetectParser)以識別檔案類型並應用適當的解析方法。
  3. 提取並轉換內容:

    • 透過解析器解析每個提取的文件,將內容提取到文本處理程序中。
    • 轉換任何二進位或不支援的資料轉換為字串格式。
  4. 合併提取的內容:

    • 儲存從所有內容中提取的內容將檔案加入臨時清單中。
    • 將各個文件的內容組合成單一字串以便進一步處理或顯示。

程式碼片段(已修改):

<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>
登入後複製

注意:修改程式碼以防止每一種程式修改程式碼以防止每次迭代期間sbf 被覆蓋並在循環外清除它以儲存連接的內容非常重要所有檔案的內容。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板