我想知道在Java中加载资源的最佳方法:
-
this.getClass().getResource() (or getResourceAsStream())
,
-
Thread.currentThread().getContextClassLoader().getResource(name)
,
-
System.class.getResource(name)
.
根据您想要的内容制定解决方案...
有两件事getResource
/getResourceAsStream()
将从它被调用的类中得到......
- 类加载器
- 起始位置
所以如果你这样做
this.getClass().getResource("foo.txt");
它将尝试从与“this”类相同的包中以及“this”类的类加载器加载 foo.txt。如果你在前面放一个“/”,那么你绝对是在引用该资源。
this.getClass().getResource("/x/y/z/foo.txt")
将从“this”的类加载器和 x.y.z 包中加载资源(它需要与该包中的类位于同一目录中)。
Thread.currentThread().getContextClassLoader().getResource(name)
将使用上下文类加载器加载,但不会根据任何包解析名称(必须绝对引用)
System.class.getResource(name)
将使用系统类加载器加载资源(它也必须被绝对引用,因为您将无法将任何内容放入 java.lang 包(System 的包)中。
只要看一下源码就可以了。还指示 getResourceAsStream 仅在从 getResource 返回的 URL 上调用“openStream”并返回该 URL。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)