Class与ClassLoader获取相关资源

测试环境:
package:com.test.classloader
其下有一个class: UnitTest和一个file: test.file
那么要拿到tets.file的输入流:

1, 使用ClassLoader的getResourceAsStream(String parameter)方法

InputStream is = UnitTest.class.getClassLoader().getResourceAsStream(
				"com/test/classloader/test.file");
System.out.println(is); 

JVM会从classPath(右击当前Project---Properties---Java Build Path---Source可以查看当前Project的classPath设置)开始按照parameter指定的文件路径去寻找指定的文件

 

若改为:

InputStream is = UnitTest.class.getClassLoader().getResourceAsStream(
                "/com/test/classloader/test.file");
System.out.println(is);

那么输出结果为null

2, 此时,如果使用Class的getResourceAsStream(String parameter)方法

InputStream is2 = UnitTest.class
                .getResourceAsStream("/com/test/classloader/test.file");
System.out.println(is2);

则JVM就可以找到parameter指定路径的资源

同样若改为:

InputStream is2 = UnitTest.class
                .getResourceAsStream("com/test/classloader/test.file");
System.out.println(is2);

InputStream is2 = UnitTest.class
                .getResourceAsStream("com/test/classloader/test.file");
System.out.println(is2);

那么输出结果为null


小结:两者读取当前Project项目中资源时
ClassLoader的getResourceAsStream方法只支持相对路径
而Class的getResourceAsStream方法只支持绝对路径

如果想要指定磁盘上的某一资源,如F:/test.file
两种方法都不能使用,都拿不到对应的IO输入流
当然这时可以使用其他方法:
如:

InputStream is3 = new FileInputStream(new File("F:/test.file"));

等等

 

欢迎指正,共同进步,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值