测试环境:
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"));
等等
欢迎指正,共同进步,谢谢!
分享到:
相关推荐
该模块主要用于Class和Classloader如何获取资源。 stream 用于JDK8的stream api用法。 string 用于写String类的用法。 iText-demo 主要来自 Jackson 使用Jackson和JDK序列化机制。 formatter JDK自带格式化类。 End
关键是要重写几个获取资源、主题的方法,以及重写getClassLoader方法 5、插件中的LayoutInfalter 通过第4步构造出来的Context获取LayoutInfater即可 6、如何实现插件代码不依赖任何特殊代码,如继承特定的...
传统方式获取流是new创建的,而在web开发中有可能获取不到配置文件,为了避免这种情况,用以下方式获取流: 1. 通过当前类字节码文件的方式,一般是用当前类的字节码文件 当前类.class....
通过虚拟目录获取文件资源 VirtualFile testFile = home.getChild("test.txt"); ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); Resource[] resources = resolver....
37.classloader中,JDK的API、Classpath中的同web-inf中的class加载方式有什么区别? 38.列举三种以上垃圾回收算法,并比较其优缺点? 39.编写代码实现一个线程池 40.描述一下JVM加载class文件的原理机制? 41....
JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用...
1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是...
3.2.2 类装载器ClassLoader 3.2.3 Java反射机制 3.3 资源访问利器 3.3.1 资源抽象接口 3.3.2 资源加载 3.4 BeanFactory和ApplicationContext 3.4.1 BeanFactory介绍 3.4.2 ApplicationContext介绍 3.4.3 父子容器 ...
3.2.2 类装载器ClassLoader 3.2.3 Java反射机制 3.3 资源访问利器 3.3.1 资源抽象接口 3.3.2 资源加载 3.4 BeanFactory和ApplicationContext 3.4.1 BeanFactory介绍 3.4.2 ApplicationContext介绍 3.4.3 父子容器 ...
(1):通过 Classloader寻找和装载 class文件 (2):解释字节码成为指令并执行,提供 class文件的运行环境 (3):进行运行期间垃圾回收 4):提供与硬件交互的平台 Java虚拟杋是在真实札器中用软件模拟实现的—种想象...
25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................
25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................