关于xxx.class.getResource()和xxx.class.getClassLoader().getResource()

在项目中,常常需要加载一些自定义的资源文件,比如各种的XML配置文件,那么就免不了要和getresource()这个方法打交道了。

关于getResource()和getClassLoader().getResource()的区别:

.getClass().getResource(fileName) :表示只会在当前调用类所在的同一路径下查找该fileName文件;
.getClass().getClassLoader().getResource(fileName):表示只会在根目录下(/)查找该文件;
fileName如果是前面加“/”,如"/fileName",则表示绝对路径,取/目录下的该文件;
如果是前面没有加“/”,如"fileName",则表示相对路径,取与调用类同一路径下的该文件。
如果路径中包含包名 ,getClass().getResource(“com/xxx/1.xml”);
包名的层级使用"/"隔开(正斜杠),而非“.”(半角句号)。

关于xxx.class.getClassLoader().getResource("")的路径

System.out.println(BigDataConfiguration.class.getClassLoader().getResource(""));

打印结果:

file:/D:/IdeaProjects/ZHBR_BIGDATA/target/classes/

关于xxx.class.getResource("")的路径

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

打印结果:

file:/D:/IdeaProjects/ZHBR_BIGDATA/target/classes/com/zhbr/dataImport/utils/

举例:

要读取resource下conf文件夹下的core-site.xml
在这里插入图片描述
四种方式:

System.out.println(BigDataConfiguration.class.getClassLoader().getResource("conf/core-site.xml"));
System.out.println("-------------------------------------------------------");
System.out.println(BigDataConfiguration.class.getResource("../../../../conf/core-site.xml"));
System.out.println("-------------------------------------------------------");
System.out.println(BigDataConfiguration.class.getClassLoader().getResource("./conf/core-site.xml"));
System.out.println("-------------------------------------------------------");
System.out.println(BigDataConfiguration.class.getResource("/conf/core-site.xml"));

打印结果:
在这里插入图片描述

发布了68 篇原创文章 · 获赞 4 · 访问量 7388

猜你喜欢

转载自blog.csdn.net/weixin_44455388/article/details/103181412