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

Class.getResource(String path)

  1. path不以’/'开头时,默认是从此类所在的包下取资源;
  2. path 以’/'开头时,则是从ClassPath根下获取;

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

  1. package testpackage;
  2. public class TestMain {
  3. public static void main(String[] args) {
  4. System.out.println(TestMain.class.getResource(""));
  5. System.out.println(TestMain.class.getResource("/"));
  6. }
  7. }

输出结果:

  1. file:/E:/workspace/Test/bin/testpackage/
  2. file:/E:/workspace/Test/bin/

上面说到的【path以’/'开头时,则是从ClassPath根下获取;】在这里就是相当于bin目录(Eclipse环境下)。

再来一个实例,假设有如下Project结构:

  1. package testpackage;
  2.  
  3. public class TestMain {
  4.  
  5. public static void main(String[] args) {
  6. // 当前类(class)所在的包目录
  7. System.out.println(TestMain.class.getResource(""));
  8. // class path根目录
  9. System.out.println(TestMain.class.getResource("/"));
  10.  
  11. // TestMain.class在/testpackage包中
  12. // 2.properties 在/testpackage包中
  13. System.out.println(TestMain.class.getResource("2.properties"));
  14.  
  15. // TestMain.class在/testpackage包中
  16. // 3.properties 在/testpackage.subpackage包中
  17. System.out.println(TestMain.class.getResource("subpackage/3.properties"));
  18.  
  19. // TestMain.class在/testpackage包中
  20. // 1.properties 在bin目录(class根目录)
  21. System.out.println(TestMain.class.getResource("/1.properties"));
  22. }
  23. }

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

Class.getClassLoader().getResource(String path)

  1. path不能以’/'开头时;
  2. path是从ClassPath根下获取;

还是先看一下下面这段代码的输出:

  1. package testpackage;
  2. public class TestMain {
  3. public static void main(String[] args) {
  4. TestMain t = new TestMain();
  5. System.out.println(t.getClass());
  6. System.out.println(t.getClass().getClassLoader());
  7. System.out.println(t.getClass().getClassLoader().getResource(""));
  8. System.out.println(t.getClass().getClassLoader().getResource("/"));//null
  9. }
  10. }

输出结果:

  1. class testpackage.TestMain
  2. sun.misc.Launcher$AppClassLoader@1fb8ee3
  3. file:/E:/workspace/Test/bin/
  4. null

从结果来看【TestMain.class.getResource("/") == t.getClass().getClassLoader().getResource("")】

如果有同样的Project结构

  1. package testpackage;
  2.  
  3. public class TestMain {
  4. public static void main(String[] args) {
  5. TestMain t = new TestMain();
  6. System.out.println(t.getClass().getClassLoader().getResource(""));
  7.  
  8. System.out.println(t.getClass().getClassLoader().getResource("1.properties"));
  9. System.out.println(t.getClass().getClassLoader().getResource("testpackage/2.properties"));
  10. System.out.println(t.getClass().getClassLoader().getResource("testpackage/subpackage/3.properties"));
  11. }
  12. }
  1. Class.getClassLoader().getResourceClass.getClassLoader().getResourceAsStream在使用时,路径选择上也是一样的。

****************************************************************************************【来自我另一博文】

-转

关于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,这里来看看他们在取资源文件时候的路径问题. 1 Class.getResource(St ...

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

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

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

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

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

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

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

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

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

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

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

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

  9. java Class.getResource和ClassLoader.getResource

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

随机推荐

  1. shell 中命令输入的快!捷!键!

    非常棒!! 非常棒!! 删除ctrl + d 删除光标所在位置上的字符相当于VIM里x或者dlctrl + h 删除光标所在位置前的字符相当于VIM里hx或者dhctrl + k 删除光标后面所有字符 ...

  2. 使用OData技术遇到的问题及解决办法

    “System.NotSupportedException”类型的未经处理的异常在 Microsoft.Data.Services.Client.dll 中发生 其他信息: 对此 POST 请求的响应 ...

  3. lua的table表处理 及注意事项

    lua,一款很轻量级很nice很强大的脚本语言,做为lua中使用最为频繁的table表,在使用之时还是有颇多的好处与坑的: 下面是大牛 云风的一片关于lua table的blog,可使得对lua ta ...

  4. Atitit vod ver 12 new feature v12 pb2 影吧 视频 电影 点播 播放系统v12新特性

    Atitit vod ver 12 new feature v12 pb2 影吧 视频 电影 点播 播放系统v12新特性 项目分离从独立的se ver Run mode from brow ex to ...

  5. C#、.Net代码精简优化(空操作符(??)、as、string.IsNullOrEmpty() 、 string.IsNullOrWhiteSpace()、string.Equals()、System.IO.Path 的用法)

    一.空操作符(??)在程序中经常会遇到对字符串或是对象判断null的操作,如果为null则给空值或是一个指定的值.通常我们会这样来处理: .string name = value; if (name ...

  6. 每天一个linux命令(42):kill命令

    Linux中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令.通常,终止一个前台进程可以使用Ctrl+C键,但是,对于一个后台进程就须 ...

  7. Pycharm远程调试

    1.在pycharm的安装目录中找到pycharm-debug.egg,将其拷贝到目标主机的/usr/lib/python2.7/dist-packages目录下: 执行: sudo easy_ins ...

  8. Oracle 11g系列:数据库

    1.创建Oracle数据库 创建Oracle数据库的最常用工具为Database Configuration Assistant(数据库配置助手),依次选择[开始]|[所有程序]|[Oracle-Or ...

  9. 移动web开发之视口viewport

    × 目录 [1]布局视口 [2]视觉视口 [3]理想视口[4]meta标签[5]总结 前面的话 在CSS标准文档中,视口viewport被称为初始包含块.这个初始包含块是所有CSS百分比宽度推算的根源 ...

  10. 邻接表有向图(二)之 C++详解

    本章是通过C++实现邻接表有向图. 目录 1. 邻接表有向图的介绍 2. 邻接表有向图的代码说明 3. 邻接表有向图的完整源码 转载请注明出处:http://www.cnblogs.com/skywa ...