有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Tika解析错误:您正在调用POI中处理OOXML的部分。您需要调用POI的其他部分来处理此数据

我想用Tika解析.doc文件,但它不起作用

我得到的错误是:

由:org引起。阿帕奇。波伊。openxml4j。例外情况。OLE2NotOfficeXmlFileException:提供的数据似乎是OLE2格式。您正在调用POI中处理OOXML(Office Open XML)文档的部分。您需要调用POI的不同部分来处理此数据(例如HSSF而不是XSSF)

我到底需要换什么

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import org.apache.tika.exception.TikaException;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.ParseContext;
import org.apache.tika.parser.microsoft.ooxml.OOXMLParser;
import org.apache.tika.sax.BodyContentHandler;

import org.xml.sax.SAXException;

public class TikaDocx {

    public static void main(final String[] args) throws IOException, TikaException, SAXException {

        //detecting the file type
        BodyContentHandler handler = new BodyContentHandler();
        Metadata metadata = new Metadata();
        FileInputStream inputstream = new FileInputStream(new File("C:\\test.doc"));
        ParseContext pcontext = new ParseContext();

        //OOXml parser
        OOXMLParser  msofficeparser = new OOXMLParser ();
        msofficeparser.parse(inputstream, handler, metadata,pcontext);
        System.out.println("Contents of the document:" + handler.toString());
        System.out.println("Metadata of the document:");
        String[] metadataNames = metadata.names();

        for(String name : metadataNames) {
            System.out.println(name + ": " + metadata.get(name));
        }
    }
}

共 (1) 个答案

  1. # 1 楼答案

    如果您已经知道文件是什么以及该文件类型的最佳解析器是什么,那么只应该调用显式ApacheTika解析器,例如OOXMLParser

    您得到的错误是告诉您正在将一个基于OLE2的.doc解析器传递给apachetika解析器,以处理OOXML文件,例如.docx

    如果您不知道您的文件类型到底是什么,那么您应该让ApacheTika确定类型并为您选择最好的解析器

    为此,请更改当前的显式行

        OOXMLParser  msofficeparser = new OOXMLParser ();
        msofficeparser.parse(inputstream, handler, metadata,pcontext);
    

    自动检测

        AutoDetectParser parser = new AutoDetectParser();
        parser.parse(inputstream, handler, metadata, pcontext);
    

    那就让蒂卡为你做艰苦的工作吧