我想用Tika解析.doc
文件,但是它不起作用。
我得到的错误是:
原因:org.apache.poi.openxml4j.exceptions.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));
}
}
}
如果您已经知道文件是什么以及该文件类型的最佳解析器,则应该仅调用显式的Apache Tika解析器,例如OOXMLParser
。
您收到的错误告诉您正在将基于OLE2的.doc
解析器传递给Apache Tika解析器,以处理诸如.docx
之类的OOXML文件>
您似乎不知道文件类型的确切位置,而应该让Apache Tika识别类型+选择最适合您的解析器
为此,请更改当前的显式行
OOXMLParser msofficeparser = new OOXMLParser (); msofficeparser.parse(inputstream, handler, metadata,pcontext);
自动检测一个>]
AutoDetectParser parser = new AutoDetectParser(); parser.parse(inputstream, handler, metadata, pcontext);
然后让Tika为您完成艰苦的工作!