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

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

Barbara Streisand
풀어 주다: 2024-10-30 03:33:28
원래의
291명이 탐색했습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿