Apache POI读取Word报UnsupportedZipFeatureException的解决方法
解决Apache POI解析Word时的UnsupportedZipFeatureException异常
问题原因
你的Word文档本质是ZIP压缩包,其中的图片条目使用了数据描述符特性,但Apache POI默认的ZIP解析逻辑中,allowStoredEntriesWithDataDescriptor参数默认是false,不允许这种格式,因此抛出异常。
解决方案
手动构建支持该特性的ZipArchiveInputStream,再以此打开OPCPackage,最后初始化XWPFDocument,绕过默认的构造限制。
完整代码示例
import org.apache.commons.compress.archivers.zip.ZipArchiveInputStream; import org.apache.commons.compress.utils.CharsetUtil; import org.apache.poi.openxml4j.opc.OPCPackage; import org.apache.poi.xwpf.usermodel.XWPFDocument; import java.io.InputStream; // 自定义解析方法,支持带数据描述符的Word文档 public XWPFDocument parseWordDocument(InputStream inputStream) throws Exception { // 创建允许存储条目带数据描述符的Zip输入流 ZipArchiveInputStream zipIn = new ZipArchiveInputStream( inputStream, CharsetUtil.defaultCharset().name(), false, true // 关键参数:开启对数据描述符的支持 ); // 通过自定义的Zip流打开OPC包 OPCPackage opcPackage = OPCPackage.open(zipIn); // 初始化XWPF文档对象 XWPFDocument doc = new XWPFDocument(opcPackage); return doc; }
注意事项
- 使用完文档后需调用
doc.close()和opcPackage.close()释放资源 - 确保项目中
commons-compress的版本与Apache POI依赖的版本一致,避免兼容性问题
内容的提问来源于stack exchange,提问作者Fly Dragon
相关产品推荐
相关产品推荐

