Java 在OSGi环境中使用OPCPackage从类路径加载文件
我正在尝试加载一个相当大的.xslx文件(29MB),以便使用POI在Java中进行处理 由于使用Java 在OSGi环境中使用OPCPackage从类路径加载文件,java,osgi,apache-poi,classloader,osgi-bundle,Java,Osgi,Apache Poi,Classloader,Osgi Bundle,我正在尝试加载一个相当大的.xslx文件(29MB),以便使用POI在Java中进行处理 由于使用InputStream读取内存中的文件时未压缩的文件大小,我遇到了堆空间问题 根据Stackoverflow上的建议,我使用OPCPackage不必将整个文件加载到内存中 我尝试使用OPCPackageopen方法加载文件。此方法接受: 文件 InputStream(无法在InputStream-OutOfMemory中加载文件) 路径 文件选项 问题是,我们在OSGi环境中工作,所以在尝试创建
InputStream
读取内存中的文件时未压缩的文件大小,我遇到了堆空间问题
根据Stackoverflow上的建议,我使用OPCPackage
不必将整个文件加载到内存中
我尝试使用OPCPackage
open方法加载文件。此方法接受:
- 文件
- InputStream(无法在InputStream-OutOfMemory中加载文件)
- 路径
URL url = getClass().getClassLoader().getResource("/excel/file.xslx");
File file = new File(url.toURI()); // URI = bundle://449.124:/excel/file.xlsx
因此出现以下异常:java.lang.IllegalArgumentException:URI方案不是“文件”
尝试改用URL路径也不成功:
File file = new File(url.getPath()); // Path= /excel/file.xslx
if(!file.exists()){
// FILE DOES NOT EXIST
}
路径选项
当我尝试使用path open方法时,它似乎无法解析路径,因为我总是遇到以下异常:java.lang.IllegalStateException:Zip文件已关闭
opcPackage = OPCPackage.open(url.toURI().getPath()); // Path= /excel/file.xslx
关于如何从捆绑包环境中引用文件以便加载它,有什么想法吗?还是我遗漏了一些明显的东西 如果无法处理输入流,则可以将输入流复制到bundle数据区域中的文件,然后处理该文件
捆绑包中的资源在文件系统中并不独立,因此如果需要,您需要将其“提取”到文件中。如果您只需要Excel文件中的几部分,您还可以使用Apache POI,这样您就不需要将文件存储在临时磁盘空间中,并且可以处理任意大的文件。Hi BJ,这就是我在问了这个问题之后开始实现它的方式。谢谢你的确认!