java classloader 路径_Java获取路径时Class.getResource()和ClassLoader.getResource()区别

a493737c1d3de7f8033eb5088b5f0fd0.png

Java中取资源时,经常用到Class.getResource()和ClassLoader.getResource(),Class.getResourceAsStream()和ClassLoader().getResourceAsStream(),这里来看看他们在取资源文件时候的路径有什么区别的问题。

环境信息:

系统:windows 10;

Java版本:jdk8;

开发工具:idea 2017.3.2;

涉及方法:

Class.getResource();

ClassLoader.getResource();

Class.getResourceAsStream();

ClassLoader().getResourceAsStream();

工程结构:

java-class-getresource.jpg

测试代码:

package lc.util;

public class ResourceDemo {

public static void main(String[] args) {

ResourceDemo resourceDemo = new ResourceDemo();

//Class.getResource路径

System.out.println("1.ResourceDemo.class.getResource(\"\")路径:"+ResourceDemo.class.getResource("").getPath());

System.out.println("2.ResourceDemo.class.getResource(\"/\")路径:"+ResourceDemo.class.getResource("/").getPath());

System.out.println("3.ResourceDemo.class.getResource(\"/\")路径:"+resourceDemo.getClass().getResource("/").getPath());

//ClassLoader().getResource路径

System.out.println("4.ResourceDemo.class.getClassLoader().getResource()路径:"+ResourceDemo.class.getClassLoader().getResource("").getPath());

System.out.println("5.ResourceDemo.class.getClassLoader().getResource(\"/\")路径:"+ResourceDemo.class.getClassLoader().getResource("/").getPath());

//从不同位置取文件

//1.从当前文件的子目录找文件,如果文件不存在调用getFile()方法会报空指针异常

System.out.println(ResourceDemo.class.getResource("resdemo/res1.properties").getFile().toString());

System.out.println(resourceDemo.getClass().getResource("resdemo/res1.properties").getFile().toString());

//2.从当前文件同级目录找文件,如果文件不存在调用getFile()方法会报空指针异常

System.out.println(ResourceDemo.class.getResource("res2.properties").getFile().toString());

//3.从classpath根目录找文件,如果文件不存在调用getFile()方法会报空指针异常

System.out.println(ResourceDemo.class.getResource("/res3.properties").getFile().toString());

System.out.println(ResourceDemo.class.getClassLoader().getResource("res4.properties").getFile().toString());

}

}

打印结果:

1.ResourceDemo.class.getResource("")路径:/E:/Workspace/iarp/target/classes/lc/util/

2.ResourceDemo.class.getResource("/")路径:/E:/Workspace/iarp/target/classes/

3.ResourceDemo.class.getResource("/")路径:/E:/Workspace/iarp/target/classes/

4.ResourceDemo.class.getClassLoader().getResource()路径:/E:/Workspace/iarp/target/classes/

5.ResourceDemo.class.getClassLoader().getResource("/")路径:null

/E:/Workspace/iarp/target/classes/lc/util/resdemo/res1.properties

/E:/Workspace/iarp/target/classes/lc/util/resdemo/res1.properties

/E:/Workspace/iarp/target/classes/lc/util/res2.properties

/E:/Workspace/iarp/target/classes/res3.properties

/E:/Workspace/iarp/target/classes/res4.properties

问题总结:

从结果显示来看,

1.Class.getResource(“”),即不以”/”开头的路径,是从当前Class类所在的包下取路径;

2.Class.getResource(“/”),即以”/”开头的路径,是从ClassPath根目录下取路径;

3.ClassLoader.getResource(),即不以”/”开头的路径,是从ClassPath根目录下取路径;

4.ClassLoader.getResource(“/”),即以”/”开头的路径,结果为null;

5.Class.getResourceAsStream()和Class.getResource相同;

6.ClassLoader().getResourceAsStream()和ClassLoader.getResource()相同;

相关说明:

这里测试工具为idea,Classpath路径为target目录;如果开发工具为eclipse,Classpath路径为bin目录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值