首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Class与ClassLoader获取有关资源

2012-11-01 
Class与ClassLoader获取相关资源测试环境:package:com.test.classloader其下有一个class: UnitTest和一个f

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"));

等等

?

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

热点排行