class.getResources()和classLoader.getResources()

class.getResources()和classLoader.getResources()Class.getResources()和classLoader.getResources()区别Class.getResources()Class.getResources(Stringpath)path如果是以/开头,就从classpath中去找(classpath可以认为是eclipse的bin目录或者是target的classes目录),如果不以/开头,就以当前类的位置开

Class.getResources()和classLoader.getResources()区别

这里写图片描述

Class.getResources()

Class.getResources(String path) path如果是以 / 开头,就从classpath中去找(classpath可以认为是eclipse的bin目录或者是target的classes目录),如果不以/开头,就以当前类的位置开始找,假如实在上一级目录,那么就是 ../application/xml.
获取application.xml文件的方式有

<!--从当前类的位置去查找 -->
System.out.println(IndexService.class.getResource("application.xml"));

这里写图片描述

<!--从classpath下查找该文件 -->
System.out.println(IndexService.class.getResource("/main/test/com/jt3/web/application.xml"));

这里写图片描述

classLoader.getResources()

获取当前类的加载器,从加载器的环境下进行加载,就是classpath目录下,注意不能用/开头,至于是为什么,看图

System.out.println(IndexService.class.getResource(""));

这里写图片描述

后面已经有一个/了,说明就是直接从classpath/目录下查找

<!-- 从当前classpath下找到-->
System.out.println(IndexService.class.getResource("/main/webapp/WEB-INF/applicationContext.xml"));

这里写图片描述

class.getResourceAsStream 和getClassLoader().getResourceAsStream

class.getResourceAsStream,如之前的class.getResource一样,只不过包装了一个流,返回给你一个输入流

<!-- 从当前类的位置开始找-->
InputStream in = IndexService.class.getResourceAsStream("application.xml");
        in.read(bytes);
        System.out.println(new String(bytes,new String("UTF-8")));

这里写图片描述

<--从classpath下找,注意要加上/ -->
InputStream in = IndexService.class.getResourceAsStream("/main/test/com/jt3/web/application.xml");

这里写图片描述

getClassLoader().getResourceAsStream

获取当前类的类加载器,在classpath下加载,不要加/

        InputStream in = IndexService.class.getClassLoader().getResourceAsStream("main/test/com/jt3/web/application.xml");

这里写图片描述

还有一种比较安全的做法

<!-- 这个做法就是,获取当前的线程的类加载器,效率比较高-->
                InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream("main/test/com/jt3/web/application.xml");

这里写图片描述

总结

可以看到的是,class.getResource() 和 classLoader.getResource(),class的方法是对classLoader的包装,其实底层都是Jvm封装的绝对路径来找地址,而个人也建议不要用绝对路径,因为可能随着环境的更变,产生classpath的目录不同,这是必然会产生错误。getResourceAsStream就是getResource的封装,相当于先用Resource获取一个文件路径,在一个new InputStream(获取到的文件路径),给你返回一个流。请注意,classLoader中的路径不能用/开头,不然只能获取不到,为null

今天的文章class.getResources()和classLoader.getResources()分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/26048.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注