在项目中,常常需要加载一些自定义的资源文件,比如各种的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"));
打印结果: