首页 > 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学习者快速成长!