java - 从 jar 内的绝对路径加载 Java 资源

标签 java resources package classloader

暂时不要标记为重复!

听我说完;我见过的所有解决方案都很好,但我不明白使用以下方式加载资源时类路径如何工作:

ClassLoader classLoader = getClass().getClassLoader()

我想设置一个资源加载器(名为 ResourceLoader),可以从 jar 包内的任何地方加载。

所以如果加载器放在com.spikespaz.engine.loader.ResourceLoader中,我不想被困在com.spikespaz.engine.loader的相对路径中.

我希望能够从 com.spikespaz.game.resources.texturescom.spikespaz.game.resources.models 加载,而不需要放置父目录中的阅读器。

我发现的是:https://stackoverflow.com/a/3862115/2512078

但据我了解,他的答案中的所有这些选项必须与加载它们的类相关。 (getClass()) 有没有办法解决这个问题,或者我误解了它?

如果我误解了,有人可以解释一下吗?

任何解决方案都必须相对于jar包或开发环境源的精确根,而我一定不需要在该根中放置任何东西。

谢谢。

最佳答案

我认为你误解或误读了他的回答https://stackoverflow.com/a/3862115/2512078

普通类加载器和上下文类加载器都能够使用绝对路径加载资源。

要使用普通类加载器执行此操作,请确保资源路径前面有一个前导 /,否则它将加载相对于加载它的类的包的资源。

this.getClass().getResource("/foo/bar.txt")` 

上下文类加载器永远不会加载相对于类的资源,路径始终被解释为绝对路径。

Thread.currentThread().getContextClassLoader().getResource("foo/bar.txt")

注意:不要在上下文类加载器中使用前导斜杠。

关于java - 从 jar 内的绝对路径加载 Java 资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44896538/

相关文章:

java - 无法从 HttpClient 调用接收数据

Android如何在gradle文件中使用字符串资源

golang 导入包内包

java - 线程 "main"java.lang.NoClassDefFoundError : Huffman (wrong name: p3/Huffman) 中出现异常

java - 带线宽的 Libgdx 圆

java - 静态类变量存储在内存中的什么位置?

java - Android:获取一个已经启动的定时器

java - 所有 SocketException 都是 "fatal"吗?

android - WebView,将本地 .CSS 文件添加到 HTML 页面?

php - 无法安装 Laravel 包 - 干预图像