java中取资源时,经常用到Class.getResource和ClassLoader.getResource,这里来看看他们在取资源文件时候的路径问题。
Class.getResource(String path)
path 不以 ‘/’ 开头时,默认是从此类所在的包下取资源;
path 以 ‘/’ 开头时,则是从ClassPath根下获取;
什么意思呢?看下面这段代码的输出结果就明白了:
package packone;
public class TestMain {
public static void main(String[] args) {
// file:/E:/git/practice/getResource/target/classes/packone/
System.out.println(TestMain.class.getResource(""));
// file:/E:/git/practice/getResource/target/classes/
System.out.println(TestMain.class.getResource("/"));
// file:/E:/git/practice/getResource/target/classes/test.properties
System.out.println(TestMain.class.getResource("/test.properties"));
// file:/E:/git/practice/getResource/target/classes/
System.out.println(TestMain.class.getClassLoader().getResource(""));
// file:/E:/git/practice/getResource/target/classes/test.properties
System.out.println(TestMain.class.getClassLoader().getResource("test.properties"));
}
}
※ Class.getResource和Class.getResourceAsStream在使用时,路径选择上是一样的。
Class.getClassLoader().getResource(String path)
path>不能以’/'开头;
path是从ClassPath根下获取;
在很多情况下,Class.getResource和ClassLoader.getResource可以随意选择,效果一样。但是当项目打成jar包后,调用前者,且path以’/'开头,则会出现找不到资源的问题,这时候就应该选择后者
※Class.getClassLoader().getResource和Class.getClassLoader().getResourceAsStream在使用时,路径选择上也是一样的。
本文深入解析了Java中Class.getResource和ClassLoader.getResource方法在加载资源时的路径差异,详细说明了路径以‘/’开头与不以‘/’开头时的资源定位方式,并对比了两者在项目打包成jar后的表现。
1425

被折叠的 条评论
为什么被折叠?



