Java 如何检查.doc文件中是否存在任何嵌入对象?

Java 如何检查.doc文件中是否存在任何嵌入对象?,java,apache-poi,Java,Apache Poi,我已经为.docx文件做了如下操作,但对于.doc文件,它抛出了InvalidFormatException public boolean checkForEmbeddedObj(File wordFile){ InputStream inStream = new FileInputStream(wordFile); XWPFDocument xwDoc = new XWPFDocument(inStream ); return xwDoc.getAllEmbedds().i

我已经为.docx文件做了如下操作,但对于.doc文件,它抛出了InvalidFormatException

public boolean checkForEmbeddedObj(File wordFile){

   InputStream inStream = new FileInputStream(wordFile);
   XWPFDocument xwDoc = new XWPFDocument(inStream );
   return xwDoc.getAllEmbedds().isEmpty();
}

知道如何对.doc文件执行相同的操作吗?

DOCX和doc文件有不同的规范,并且在Apache POI中的实现也不同

DOCX文件:

  • 使用poi ooxml库和XWPFDocument类
文档文件

  • 使用poi草稿行库和HWPFDocument类
旧文档文件

  • 使用poi草稿行库和HWPFOldDocument类
为了从文档文件中提取嵌入数据,您可以使用
OLE2ExtractorFactory.getembeddeddocstextractors
,如下所示:

import org.apache.poi.extractor.OLE2ExtractorFactory;
import org.apache.poi.extractor.POITextExtractor;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.WordExtractor;

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

    void hwpfExtractor(File wordFile) throws IOException {

        HWPFDocument doc = new HWPFDocument(new FileInputStream(wordFile));

        POITextExtractor[] embeddedExtractors = OLE2ExtractorFactory.getEmbededDocsTextExtractors(new WordExtractor(doc));

        for (POITextExtractor ext : embeddedExtractors) {

            //ext could be one of the instance of org.apache.poi.extractor.POITextExtractor
            if (ext instanceof XXX) {
                // do stuff

            }


        }
    }
另见:


谢谢您的回答。我找不到任何方法来检查HWPFDocument类中的嵌入对象。我缺少什么吗?我使用的是poi 3.7 OLE2ExtractorFactory类在此版本中不可用。我已经尝试过了,但在OLE2流中找不到支持的文档错误我不想读取嵌入对象,只需要检测文档中的嵌入对象。
POITextExtractor[]embeddedExtractors
只需检查其大小即可检测嵌入对象。当你说我遇到XYZ错误时。。请提供完整的stacktrace。Stacktrace提供了查找原因并尝试解决问题所需的所有信息。