java - 动态加载的 jar 中的 getResourceAsStream

标签 java eclipse jar getresource

我知道有几十个(如果不是数百个)关于 Java 的 getResource/getResourceAsStream 的问题,但我没有找到我的问题的任何答案。

我动态加载 jar :(String path is given)

File jar = new File(path);
URL url = new URL("file", "localhost", jar.getAbsolutePath());
URLClassLoader loader = new URLClassLoader(new URL[] { url });
c = loader.loadClass(name);

然后在 jar 中我尝试加载 jar 中的资源。这个资源显然存在于 jar 中,如果我只是在 Eclipse 中使用类加载器运行整个过程,整个过程就可以工作。在 jar 里它不起作用。$

getClass().getResourceAsStream("resource.dat"); 

我尝试了 /packageName/resource.datpackageName/resource.dat/resource.dat 的所有可能组合>资源.dat。它们都抛出一个 stream closed 异常。

我尝试调试并最终打印了通过 getClass().getResource(path) 加载的这些文件的 URL>

这导致了以下 URL,我觉得它不正常。它应该说“localhostC:...”吗?

jar:file://localhostC:\Users\******\export.jar!/packageName/resource.dat

转换此 URL 也会引发异常 (URISyntaxException)。

这个 URL 真的坏了还是我做错了什么?

最佳答案

尝试更改行:

URL url = new URL("file", "localhost", jar.getAbsolutePath());

URL url = new URL("file", null, jar.getAbsolutePath());

在这种情况下,URL 构造函数中的主机参数不适用。

关于java - 动态加载的 jar 中的 getResourceAsStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26615687/

相关文章:

java - 我可以在 DropWizard 中拥有多个配置文件吗?

android - 如何在我的 Android 项目中使用其他 API 版本作为构建目标?

java - 向客户端发送文件时出现棘手的 NullPointerException

java - 两个大小相同的 jar 显示不同的校验和,为什么会这样?

android - 如何使用外部 jar

java - Oauth v2 承载 token 具有 Oauth v1 属性

java - 什么是 NullPointerException,我该如何解决?

java - 如果接口(interface)不能有构造函数,这里会发生什么?

java - GWT 2.5。 Eclipse插件

eclipse - 相当于 Visual Studio 控制台应用程序 + 类库解决方案的 Java/Eclipse