参考博客:http://www.cnblogs.com/yejg1212/p/3270152.html

Class.getResource(String path)

当path以/开头,如/a/b/c.properties时,查找的路径为: classpath路径:path。
当path不以/开头时,如c.properties,查找的路径为:当前调用类的路径:path。

什么意思呢?看下面这段代码的输出结果就明白了:

package testpackage;
public class TestMain {
public static void main(String[] args) {
System.out.println(TestMain.class.getResource(""));
System.out.println(TestMain.class.getResource("/"));
}
} 输出结果:
file:/E:/workspace/Test/bin/testpackage/
file:/E:/workspace/Test/bin/

※Class.getResource和Class.getResourceAsStream在使用时,路径选择上是一样的。

Class.getClassLoader().getResource(String path)

path不能以’/'开头时;
path是从ClassPath根下获取;
package testpackage;
public class TestMain {
public static void main(String[] args) {
TestMain t = new TestMain();
System.out.println(t.getClass());
System.out.println(t.getClass().getClassLoader());
System.out.println(t.getClass().getClassLoader().getResource(""));
System.out.println(t.getClass().getClassLoader().getResource("/"));//null
}
} //输出结果:
class testpackage.TestMain
sun.misc.Launcher$AppClassLoader@1fb8ee3
file:/E:/workspace/Test/bin/
null

※Class.getClassLoader().getResource和Class.getClassLoader().getResourceAsStream在使用时,路径选择上也是一样的。

但是我做的实验下面:getClassLoader().getResource("/")也是行的,为什么呢?

在TestController中想要获取com/cy/config包下面的config.xml文件:

@Controller
public class TestController { private static Logger logger = (Logger) LoggerFactory.getLogger(TestController.class); @RequestMapping("/test")
public void test(HttpServletRequest request){
String path = this.getClass().getResource("/").getPath() + "com"+File.separator+"cy"+File.separator+"config"+File.separator+"config.xml";
System.out.println(path);
// /D:/tomcat8.5.9/webapps/springMVC/WEB-INF/classes/com\cy\config\config.xml String path2 = this.getClass().getResource("").getPath() + "com"+File.separator+"cy"+File.separator+"config"+File.separator+"config.xml";
System.out.println(path2);
// /D:/tomcat8.5.9/webapps/springMVC/WEB-INF/classes/com/cy/controller/com\cy\config\config.xml String path3 = this.getClass().getClassLoader().getResource("/").getPath() + "com"+File.separator+"cy"+File.separator+"config"+File.separator+"config.xml";
System.out.println(path3);
// /D:/tomcat8.5.9/webapps/springMVC/WEB-INF/classes/com\cy\config\config.xml String path4 = this.getClass().getClassLoader().getResource("").getPath() + "com"+File.separator+"cy"+File.separator+"config"+File.separator+"config.xml";
System.out.println(path4);
// /D:/tomcat8.5.9/webapps/springMVC/WEB-INF/classes/com\cy\config\config.xml
}
}

注意的是:

1.                                        

this.getClass().getClassLoader().getResource("").getPath()中如果文件的路径中有#空格等特殊字符的话,会转义为%23等这样的字符,得到的路径就不正确

这时候要将特殊字符转义,这是我在项目中遇到的:

URLDecoder.decode(path, "UTF-8")

2.File.separator:                                        

File.separator: 是系统分隔符,比如windows下面文件路径的分隔符是"\"; linux下面是"/"

但是在windows下面和linux下面都可以用"/"

												

关于Class.getResource和ClassLoader.getResource的路径问题(转)的更多相关文章

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

    Java中取资源时,经常用到Class.getResource和ClassLoader.getResource,这里来看看他们在取资源文件时候的路径问题. Class.getResource(Stri ...

  2. 【转】关于Class.getResource和ClassLoader.getResource的路径问题

    Java中取资源时,经常用到Class.getResource和ClassLoader.getResource,这里来看看他们在取资源文件时候的路径问题. Class.getResource(Stri ...

  3. (转)关于Class.getResource和ClassLoader.getResource的路径问题

    Java中取资源时,经常用到Class.getResource和ClassLoader.getResource,这里来看看他们在取资源文件时候的路径问题. 1 Class.getResource(St ...

  4. Class.getResource和ClassLoader.getResource的路径写法

    Java中取资源时,经常用到Class.getResource和ClassLoader.getResource,这里来看看他们在取资源文件时候的路径问题. Class.getResource(Stri ...

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

    原文:http://swiftlet.net/archives/868 在Java中获取资源的时候,经常用到Class.getResource和ClassLoader.getResource,本文给大 ...

  6. 关于获取资源文件,Class.getResource和ClassLoader.getResource的区别

    原文同步发表至个人博客[夜月归途] 原文链接:http://www.guitu18.com/se/java/2019-02-22/29.html 作者:夜月归途 出处:http://www.guitu ...

  7. 【JAVA】Class.getResource()与ClassLoader.getResource()的区别

    转载自:https://blog.csdn.net/qq_33591903/article/details/91444342 Class.getResource()与ClassLoader.getRe ...

  8. 使用Class.getResource和ClassLoader.getResource方法获取文件路径

    自从转投Java阵营后,一直发下Java程序的路径读取异常麻烦,因此查阅了比较多的版本内容,整合了一份自己的学习笔记.主要使用Class及通过ClassLoader来动态获取文件路径. 查阅链接如下: ...

  9. 【转载】使用Class.getResource和ClassLoader.getResource方法获取文件路径

    自从转投Java阵营后,一直发下Java程序的路径读取异常麻烦,因此查阅了比较多的版本内容,整合了一份自己的学习笔记.主要使用Class及通过ClassLoader来动态获取文件路径. 查阅链接如下: ...

  10. java Class.getResource和ClassLoader.getResource

    http://www.cnblogs.com/wang-meng/p/5574071.html http://blog.csdn.net/earbao/article/details/50009241 ...

随机推荐

  1. Knockout 监控数组对象属性

    代码: function Product(ProductID,ProductName,ProductNum,Result,Price) { this.ProductID = ko.observable ...

  2. LA 4636 积木艺术

    https://vjudge.net/problem/UVALive-4636 题意: 给出正视图和侧视图,判断最少要用多少个立方体. 思路: 首先正视图里出现的积木个数都是必须的,记录下每一列积木的 ...

  3. POJ 2443 Set Operation(压位加速)

    http://poj.org/problem?id=2443 题意: 有1000个集合,每个集合有至多10000个数,之后输入多个询问,判断询问的两个数是否位于同一个集合. 思路: 位运算...很强大 ...

  4. tomcat config https 443

    设置https: <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true" ...

  5. mybatis之org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'time' in 'class java.lang.String'

    mybatis接口 List<String> getUsedCate(String time); 配置文件 <select id="getUsedCate" pa ...

  6. BootStrap--scroll

    滚动侦测 滚动侦测基本使用方法为: <body data-spy="scroll"> <nav class="navbar navbar-default ...

  7. iOS开发Objective-C基础之──多态

    Objective-C语言是面向对象的高级编程语言,因此,它具有面向对象编程所具有的一些特性,即:封装性.继承性和多态性. 今天介绍一下Objective-C中的多态性. 一.什么是多态 多态:不同对 ...

  8. Windows 10 安装 Docker

    下载Docker For Windows 地址:https://download.docker.com/win/stable/Docker%20for%20Windows%20Installer.ex ...

  9. C++11_ 右值引用

    版权声明:本文为博主原创文章,未经博主允许不得转载. 由于右值所产生的临时变量问题一直是一种诟病,C++11中引入了右值引用这个核心语言机制,来提升运行期性能. 首先我先说明一下什么是左值和右值: 左 ...

  10. 最终还是迁移到github

    作为全球最大的程序员同性交友社区,github pages 吸引了我 为了有一个更好的博客的写作环境 将会把内容逐渐迁移到 github.io 地址 zongxiao.github.io 新的文章也会 ...