阅读XLSM文件大小6MB -Apache POI 3.9-的元数据

时间:2013-08-26 19:47:05

标签: apache-poi apache-tika

我需要读取XLSM文件元数据,小于4 MB的文件以下说明正常工作:

try {
OPCPackage pkg = OPCPackage.open (new FileInputStream ("C:\\Path to file.xlsm"));
XSSFWorkbook XSSFWorkbook = new document (pkg);
documento.getProperties poixmlProperties = ();
...
} catch (Exception ex) {
...
} finally {
...
}

对于大于4 MB的文件,不运行第二行(XSSFWorkbook document=new XSSFWorkbook (pkg)),直接跳转到finally块而不会出现任何错误。

1 个答案:

答案 0 :(得分:0)

首先,当你有一个File对象时,不要使用InputStream!使用InputStream意味着POI必须将整个内容缓冲到内存中,而使用File,它可以将其保留在磁盘上直到需要。作为covered in the POI documentation,而不是打开:

OPCPackage pkg = OPCPackage.open(new File("file.xlsx"));

其次,当您想要的只是元数据时,您似乎正在打开整个Excel结构并将其解析到内存中。别!解雇XSSFWorkbook会占用大量的处理和内存,如果您关心的只是元数据,那么您就不需要这些处理和内存,而元数据位于文件的单独区域中

相反,只需加载属性本身,然后使用它。你的最终代码将是:

OPCPackage pkg = OPCPackage.open(new File("file.xlsx"));
POIXMLProperties props = new POIXMLProperties(pkg);
System.out.println("The title is " + props.getCorePart().getTitle());

应该只加载文件总大小的一小部分作为内存使用