首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache POI Runtimeexception on close()

Apache POI Runtimeexception on close()
EN

Stack Overflow用户
提问于 2015-01-16 00:40:57
回答 1查看 1.5K关注 0票数 2

我在使用Apache POI读取一些.docx内容并将结果显示为未格式化的预览时遇到了问题。Im使用的是POI版本3.11。

代码:

代码语言:javascript
复制
private static String POI2Text(File file) {
    POITextExtractor extractor = null;
    try {
        extractor = ExtractorFactory.createExtractor(file);
        return extractor.getText();
    } catch (Exception ex) {
        logger.warn("Error:", ex);
    } finally {
        if (extractor!=null) try { extractor.close(); } catch (Exception ex) { logger.warn("Error:", ex); }
    }
    return "";
}

在finally块(extractor.close())中抛出以下异常:

代码语言:javascript
复制
org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException: Fail to save: an error occurs while > saving the package : part
     at org.apache.poi.openxml4j.opc.ZipPackage.saveImpl(ZipPackage.java:503) ~[agent.jar:na]
     at org.apache.poi.openxml4j.opc.OPCPackage.save(OPCPackage.java:1425) ~[agent.jar:na]
     at org.apache.poi.openxml4j.opc.OPCPackage.save(OPCPackage.java:1412) ~[agent.jar:na]
     at org.apache.poi.openxml4j.opc.ZipPackage.closeImpl(ZipPackage.java:353) ~[agent.jar:na]
     at org.apache.poi.openxml4j.opc.OPCPackage.close(OPCPackage.java:425) ~[agent.jar:na]
     at org.apache.poi.POIXMLTextExtractor.close(POIXMLTextExtractor.java:87) ~[agent.jar:na]
     ....
Caused by: java.lang.IllegalArgumentException: part
     at org.apache.poi.openxml4j.opc.OPCPackage.addPackagePart(OPCPackage.java:873) ~[agent.jar:na]
     at org.apache.poi.openxml4j.opc.ZipPackage.saveImpl(ZipPackage.java:448) ~[agent.jar:na]
     ... 15 common frames omitted

有什么办法防止这种异常吗?最大的问题是,在抛出异常之后,poi没有释放文件句柄。我需要能够在我的应用程序之外移动或编辑文件。

EN

回答 1

Stack Overflow用户

发布于 2015-02-12 17:33:51

快速反馈:我可以通过以只读方式打开一个输入流,然后使用这个流通过POITextExtractor提取数据来解决这个问题。

代码语言:javascript
复制
try (InputStream is = Files.newInputStream(path, StandardOpenOption.READ);
            POITextExtractor extractor = ExtractorFactory.createExtractor(is)) {
    return extractor.getText();
} catch (Exception ex) {
    logger.warn("Error in file {}", path, ex);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27968461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档