Class.getResource(String path)

  1. path不以’/'开头时,默认是从此类所在的包下取资源;
  2. path 以’/'开头时,则是从ClassPath根下获取;
  3.  
  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. 输出结果
  1. file:/E:/workspace/Test/bin/testpackage/
  2. file:/E:/workspace/Test/bin/

如果我们想在TestMain.java中分别取到1~3.properties文件,该怎么写路径呢?代码如下:

  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在<bin>/testpackage包中
  12. // 2.properties 在<bin>/testpackage包中
  13. System.out.println(TestMain.class.getResource("2.properties"));
  14.  
  15. // TestMain.class在<bin>/testpackage包中
  16. // 3.properties 在<bin>/testpackage.subpackage包中
  17. System.out.println(TestMain.class.getResource("subpackage/3.properties"));
  18.  
  19. // TestMain.class在<bin>/testpackage包中
  20. // 1.properties 在bin目录(class根目录)
  21. System.out.println(TestMain.class.getResource("/1.properties"));
  22. }
  23. }

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

使用Class.getClassLoader().getResource(String path)可以这么写

  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. }

From:http://www.cnblogs.com/yejg1212/p/3270152.html

Class.getResources()和classLoader.getResources()区别的更多相关文章

  1. 反射中Class.forName()和classLoader的区别

    搞清楚两者之间区别前,我们来了解下类加载过程. 一.类加载过程 1.加载 通过一个类的全限定名来获取定义此类的二进制字节流. 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构. 在内存中生 ...

  2. classloader.getresources() 介绍

    ◆普通情况下,我们都使用相对路径来获取资源,这种灵活性比較大. 比方当前类为com/bbebfe/Test.class 而图像资源比方sample.gif应该放置在com/bbebfe/sample. ...

  3. 在Java的反射中,Class.forName和ClassLoader的区别

    前言 最近在面试过程中有被问到,在Java反射中Class.forName()加载类和使用ClassLoader加载类的区别.当时没有想出来后来自己研究了一下就写下来记录一下. 解释 在java中Cl ...

  4. Class.forName和ClassLoader.loadClass区别(转)

    Java中class是如何加载到JVM中的:1.class加载到JVM中有三个步骤    装载:(loading)找到class对应的字节码文件.    连接:(linking)将对应的字节码文件读入 ...

  5. Java反射中Class.forName和classloader的区别

    Java中Class.forName和classloader都可以用来对类进行加载. Class.forName除了将类的.class文件加载到jvm中之外,还会对类进行解释,执行类中的static块 ...

  6. className.class.getResourceAsStream与ClassLoader.getSystemResourceAsStream区别

    className.class.getResourceAsStream : 一: 要加载的文件和.class文件在同一目录下,例如:com.x.y 下有类Test.class ,同时有资源文件conf ...

  7. 反射中,Class.forName 和 classloader 的区别

    https://blog.csdn.net/qq_27093465/article/details/52262340 java中class.forName()和classLoader都可用来对类进行加 ...

  8. Class.forName和ClassLoader的区别

    一 看名字就知道了,一个是类的创建,一个类加载器 二 再看下Class.forName源码,调用了ClassLoader @CallerSensitive public static Class< ...

  9. 在 Java 的反射中,Class.forName 和 ClassLoader 的区别

    1. 解释 在java中Class.forName()和ClassLoader都可以对类进行加载.ClassLoader就是遵循双亲委派模型最终调用启动类加载器的类加载器,实现的功能是“通过一个类的全 ...

随机推荐

  1. windows下使用curl命令&&常用curl命令

    什么是curl命令? curl是利用URL语法在命令行方式下工作的开源文件传输工具.它被广泛应用在Unix.多种Linux发行版中,并且有DOS和Win32.Win64下的移植版本. 如何在windo ...

  2. springmvc返回json对象

    1.引入jackson的依赖 <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -- ...

  3. Mongodb更新数组$pull修饰符 (mongodb 修改器($inc/$set/$unset/$push/$pop/upsert))

    mongodb 修改器($inc/$set/$unset/$push/$pop/upsert))   https://www.jb51.net/article/112588.htm http://bl ...

  4. zabbix :web 界面显示的监控项值为0或者空

    [参考文章]:[错误汇总]zabbix_get 的值一直为 0 1. 问题现象 zabbix 版本:3.4: server 端部署在 192.168.145.134 ,agent 节点部署在 192. ...

  5. Python进行Redis数据迁移

    Python进行Redis数据迁移 由于开发时的误操作,导致redis数据损坏,所以需要进行redis的数据迁移,网上大佬的教程基本都是需要下载附加工具,亦或是需要一些复杂的操作,个人觉得麻烦还不如写 ...

  6. Nginx 之 Location 的整理

    1. Location 的整理 在将配置解析完后,所有的 location 此时都以 tree 的形式组织起来,具体可参考 Nginx之 Location 的生成. 此时需要对所有 server 下的 ...

  7. Xshell查看日志

    查询日志命令(复制后鼠标右键粘贴): tail  -1000f /mnt/logs/SMFManagement/SMFManagement_info.log

  8. ORACLE EXECUTE IMMEDIATE 小结

    EXECUTE IMMEDIATE 代替了以前Oracle8i中DBMS_SQL package包.它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前,E ...

  9. Android:JACK编译错误汇总及解决

    jack server交互命令: jack-admin start-server jack-admin kill-server jack-admin list-server jack-admin un ...

  10. 20 Flutter仿京东商城项目 商品详情 底部弹出筛选属性 以及筛选属性页面布局

    ProductContentFirst.dart import 'package:flutter/material.dart'; import '../../widget/JdButton.dart' ...