Java で Apache Tika を使用して、zip アーカイブ内のファイルからコンテンツを抽出するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-10-30 03:33:28
オリジナル
282 人が閲覧しました

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

Apache Tika を使用した Zip アーカイブ内のファイルからのコンテンツの抽出

問題:

開発Apache Tika を利用して zip アーカイブ内に保存されたファイルの内容を読み取る Java プログラム。 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 が上書きされないようにコードを変更し、連結されたデータを保存するためにループの外で sbf をクリアすることが重要です。すべてのファイルのコンテンツ。

以上がJava で Apache Tika を使用して、zip アーカイブ内のファイルからコンテンツを抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート