ホームページ >Java >&#&チュートリアル >Apache Tika を使用して ZIP アーカイブ内のファイルからコンテンツを抽出するにはどうすればよいですか?

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

Susan Sarandon
Susan Sarandonオリジナル
2024-10-29 06:59:02375ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。