比较Class.getResource与Class.getClassLoader().getResource两种方式读取资源文件

Posted N!CE波

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了比较Class.getResource与Class.getClassLoader().getResource两种方式读取资源文件相关的知识,希望对你有一定的参考价值。

 1 /**
 2  * @author zhangboqing
 3  * @date 2018/7/10
 4  */
 5 public class FileDemo {
 6 
 7 
 8     public static void main(String[] args) {
 9 //        demo1();
10 //        demo2();
11 
12 //        demo3();
13 //        demo4();
14     }
15 
16 
17     //=====================================================
18     //        1.Class.getResource(String path)
19     //=====================================================
20     //Class.getResource和Class.getResourceAsStream在使用时,路径选择上是一样的。
21     //path不以’/‘开头时,默认是从此类所在的包下取资源;
22     //path  以’/‘开头时,则是从ClassPath根下获取;
23 
24     private static void demo1() {
25         System.out.println(FileDemo.class.getResource(""));
26         System.out.println(FileDemo.class.getResource("/"));
27 
28         //file:/Users/zhangboqing/Software/MyGithub/java_knowledge_sea/java_base/target/classes/com/zbq/base/file/
29         //file:/Users/zhangboqing/Software/MyGithub/java_knowledge_sea/java_base/target/classes/
30     }
31     private static void demo2() {
32         // 当前类(class)所在的包目录
33         System.out.println(FileDemo.class.getResource(""));
34         // class path根目录
35         System.out.println(FileDemo.class.getResource("/"));
36 
37         // TestMain.class在com.zbq.base.file包中
38         // 2.properties  在com.zbq.base.file包中
39         System.out.println(FileDemo.class.getResource("2.properties"));
40 
41         // FileDemo.class在com.zbq.base.file包中
42         // 3.properties  在com.zbq.base.file.demo包中
43         System.out.println(FileDemo.class.getResource("demo/3.properties"));
44 
45         // FileDemo.class在com.zbq.base.file包中
46         // 1.properties  在(class根目录)
47         System.out.println(FileDemo.class.getResource("/1.properties"));
48     }
49 
50     //======================================================================
51     //        2.Class.getClassLoader().getResource(String path)
52     //======================================================================
53     //Class.getClassLoader().getResource和Class.getClassLoader().getResourceAsStream在使用时,路径选择上也是一样的
54     //path不能以’/‘开头时;
55     //path是从ClassPath根下获取;
56 
57     private static void demo3() {
58         FileDemo t = new FileDemo();
59         System.out.println(t.getClass());
60         System.out.println(t.getClass().getClassLoader());
61         System.out.println(t.getClass().getClassLoader().getResource(""));
62         System.out.println(t.getClass().getClassLoader().getResource("/"));//null
63     }
64 
65     private static void demo4() {
66         FileDemo t = new FileDemo();
67         System.out.println(t.getClass().getClassLoader().getResource(""));
68 
69         System.out.println(t.getClass().getClassLoader().getResource("1.properties"));
70         System.out.println(t.getClass().getClassLoader().getResource("com/zbq/base/file/2.properties"));
71         System.out.println(t.getClass().getClassLoader().getResource("com/zbq/base/file/demo/3.properties"));
72     }
73 }

 

以上是关于比较Class.getResource与Class.getClassLoader().getResource两种方式读取资源文件的主要内容,如果未能解决你的问题,请参考以下文章

Class.getResource和ClassLoader.getResource的区别分析

Class.getResource() 和 ClassLoader.getResource() 有啥区别?

关于Class.getResource和ClassLoader.getResource的路径问题

Class.getResource()和ClassLoader.getResource()异同及用法

关于Class.getResource和ClassLoader.getResource的路径问题

关于Class.getResource和ClassLoader.getResource的路径问题