测试环境:
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"));
等等
欢迎指正,共同进步,谢谢!