从资源中检索文件时,我应该在什么情况下使用哪一个?
JB *_*zet 52
第二个叫第一个.差异在javadoc中描述.
第一个采用不以a /开头的路径,并始终从类路径的根开始.
第二个采取可以以a开头的路径/.如果是,则从类路径的根开始.如果不是,则从调用该方法的类的包开始.
所以getClass().getClassLoader().getResource("foo/bar.txt")相当于getClass().getResource("/foo/bar.txt").
并且,假定的getClass()返回一类是在包foo,getClass().getResource("bar.txt")是相当于getClass().getClassLoader().getResource("foo/bar.txt")
小智 23
我应该在什么情况下使用哪一个?
都不是.你应该打电话Thread.currentThread().getContextClassLoader().
根据您是使用静态方法还是实例方法调用,这样做的好处是不需要更改.
更重要的是,它将正确处理容器内的类加载器委派.如果您不使用它,您可能会发现找不到"应用程序"资源,因为加载它的类是由更高代理层次结构的类加载器加载的.
Jon*_*eet 11
基本上,Class.getResource()允许您指定相对于类的包的路径,而ClassLoader.getResource()始终是"绝对"路径.
所以:
foo.bar.Baz.class.getResource("data.txt")
Run Code Online (Sandbox Code Playgroud)
相当于:
some.Other.class.getResource("/foo/bar/data.txt")
Run Code Online (Sandbox Code Playgroud)
它们都相当于:
some.Other.class.getClassLoader().getResource("foo/bar/data.txt")
Run Code Online (Sandbox Code Playgroud)
(假设some.Other和foo.bar.Baz用相同的类加载器加载的,当然.)
| 归档时间: |
|
| 查看次数: |
58568 次 |
| 最近记录: |