gpt4 book ai didi

java - 在 OSGi 环境中使用 OPCPackage 从类路径加载文件

转载 作者:行者123 更新时间:2023-11-29 04:47:28 24 4
gpt4 key购买 nike

我正在尝试加载一个相当大的 .xslx 文件 (29MB) 以使用 POI 在 Java 中进行处理。

由于使用 InputStream 读取内存中的文件时未压缩的文件大小,我遇到了堆空间问题。

根据 Stackoverflow 上的建议,我使用 OPCPackage 不必将整个文件加载到内存中。

我尝试使用 OPCPackage 打开方法加载文件。此方法接受:

  • 文件
  • InputStream(无法在输入流中加载文件 - OutOfMemory)
  • 路径

文件选项

问题是我们在 OSGi 环境中工作,因此在尝试使用 Assets 路径创建文件时。 Assets 路径实际上是指向包的链接

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 scheme is not "file"

尝试改用 URL 路径也不成功:

File file = new File(url.getPath()); // Path= /excel/file.xslx
if(!file.exists()){
// FILE DOES NOT EXIST
}

路径选项

当我尝试使用路径打开方法时,它似乎无法解析路径,因为我总是得到以下异常:java.lang.IllegalStateException: Zip File is closed

opcPackage = OPCPackage.open(url.toURI().getPath()); // Path= /excel/file.xslx

关于如何从捆绑环境中引用我的文件以加载它的任何想法?还是我在这里遗漏了一些明显的东西?

最佳答案

如果您无法处理输入流,那么您可以将输入流复制到包数据区域中的一个文件,然后处理该文件。

bundle 中的资源在文件系统上并不独立,因此您需要在必要时将它们“提取”到一个文件中。

关于java - 在 OSGi 环境中使用 OPCPackage 从类路径加载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36616647/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com