我知道有几十个(如果不是数百个)关于 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.dat
、packageName/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/