`
usummer
  • 浏览: 9807 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

等等

 

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

分享到:
评论

相关推荐

    java8源码-javase:Java

    该模块主要用于Class和Classloader如何获取资源。 stream 用于JDK8的stream api用法。 string 用于写String类的用法。 iText-demo 主要来自 Jackson 使用Jackson和JDK序列化机制。 formatter JDK自带格式化类。 End

    Android插件框架Android-Plugin-Framework.zip

    关键是要重写几个获取资源、主题的方法,以及重写getClassLoader方法 5、插件中的LayoutInfalter 通过第4步构造出来的Context获取LayoutInfater即可 6、如何实现插件代码不依赖任何特殊代码,如继承特定的...

    day020-继承加强和设计模式代码和笔记.rar

    传统方式获取流是new创建的,而在web开发中有可能获取不到配置文件,为了避免这种情况,用以下方式获取流: 1. 通过当前类字节码文件的方式,一般是用当前类的字节码文件 当前类.class....

    spring源代码

    通过虚拟目录获取文件资源 VirtualFile testFile = home.getChild("test.txt"); ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); Resource[] resources = resolver....

    JAVA面试题最全集

    37.classloader中,JDK的API、Classpath中的同web-inf中的class加载方式有什么区别? 38.列举三种以上垃圾回收算法,并比较其优缺点? 39.编写代码实现一个线程池 40.描述一下JVM加载class文件的原理机制? 41....

    java 面试题 总结

    JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用...

    超级有影响力霸气的Java面试题大全文档

    1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是...

    Spring.3.x企业应用开发实战(完整版).part2

    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 父子容器 ...

    Spring3.x企业应用开发实战(完整版) part1

    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 父子容器 ...

    Java经典入门教程pdf完整版

    (1):通过 Classloader寻找和装载 class文件 (2):解释字节码成为指令并执行,提供 class文件的运行环境 (3):进行运行期间垃圾回收 4):提供与硬件交互的平台 Java虚拟杋是在真实札器中用软件模拟实现的—种想象...

    JAVA核心知识点整理(有效)

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

    java核心知识点整理.pdf

    25 JAVA8 与元数据.................................................................................................................................25 2.4. 垃圾回收与算法 .................................

Global site tag (gtag.js) - Google Analytics