Class.getResource(String path)
System.out.println(Test.class.getResource(""));
System.out.println(Test.class.getResource("/"));
输出结果如下:
file:/D:/Projects/IdeaProjects/javaweb/target/classes/com/xgc/test/
file:/D:/Projects/IdeaProjects/javaweb/target/classes/
分析:
-
Class.getResource("")
是从当前类所在包路径去获取资源 -
Class.getResource("/")
是从classpath的根路径获取
现在来获取resources
下的文件2.txt
和3.txt
System.out.println(Test.class.getResource("/3.txt"));
System.out.println(Test.class.getResource("/test/2.txt"));
输出结果如下:
file:/D:/Projects/IdeaProjects/javaweb/target/classes/3.txt
file:/D:/Projects/IdeaProjects/javaweb/target/classes/test/2.txt
ClassLoader.getResource
System.out.println(Test.class.getClassLoader().getResource(""));
System.out.println(Test.class.getClassLoader().getResource("/"));
输出结果如下
file:/D:/Projects/IdeaProjects/javaweb/target/classes/
null
分析:
-
ClassLoader.getResource("")
是从classpath的根路径获取 -
ClassLoader.getResource("/")
,说明路径中无法带有"/"
现在来获取resources
下的文件2.txt
和3.txt
System.out.println(Test.class.getClassLoader().getResource("3.txt"));
System.out.println(Test.class.getClassLoader().getResource("test/2.txt"));
输出结果如下
file:/D:/Projects/IdeaProjects/javaweb/target/classes/3.txt
file:/D:/Projects/IdeaProjects/javaweb/target/classes/test/2.txt
总结
-
Class.getResource("/")
和ClassLoader.getResource
都是从classpath的根路径开始获取 -
Class.getResource("")
获取的是当前类所在的包路径 -
ClassLoader.getResource()
不允许存在"/"
这里获取到的其实只是资源的URL。想要对资源进行操作,还需要进行一些其他的操作。
其实,不管是Class还是ClassLoader都存在一个
getResourceAsStream()
方法,通过这个方法我们可以直接对资源进行处理。这个方法对资源路径的处理和getResource()
方法一样。
参考文章
读取resources资源-class.getResource、ClassLoader.getResource和getResourceAsStream的区别