>Java >java지도 시간 >Java에서 Apache Tika를 사용하여 zip 아카이브 내의 파일에서 콘텐츠를 추출하려면 어떻게 해야 합니까?

Java에서 Apache Tika를 사용하여 zip 아카이브 내의 파일에서 콘텐츠를 추출하려면 어떻게 해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-30 03:33:28338검색

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가 덮어쓰이는 것을 방지하고 루프 외부에서 이를 지워 연결된 항목을 저장하도록 코드를 수정하는 것이 중요합니다. 모든 파일의 콘텐츠입니다.

위 내용은 Java에서 Apache Tika를 사용하여 zip 아카이브 내의 파일에서 콘텐츠를 추출하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.