class.getResources与ClassLoader.getResources有不同的访问途径,如果访问方式不对,只会得到null值。

Maven工程目录如下

如上图,编译后,maven会将src下面的代码及资源文件转移至target/classes下面,下文所提及的目录均为转移后的目录。

class.getResources获取资源

package demo;public class AcquirePath {//class.getResource(String path)public static void getPathByClass() {//path不以"/"开头,则以类所在的当前目录为起点寻址,使用相对位置寻址//若不使用相对位置寻址,则会返回null//Maven工程,编译期间会将class及相应的资源文件转移至 classes目录,//故AcquirePath的当前目录变为// /F:/test/test/target/classes/demo/System.out.println(AcquirePath.class.getResource(""));System.out.println(AcquirePath.class.getResource("."));//资源文件会同步转移至classes目录下,使用相对位置可获取System.out.println(AcquirePath.class.getResource("../db/db.properties"));System.out.println(AcquirePath.class.getResource("../util/util.properties"));System.out.println(AcquirePath.class.getResource("../root.properties"));//path以"/"开头,则从classpath路径开始,以绝对位置方式寻址//若不使用绝对位置寻址,则会返回null//maven工程中,classpath指class目录System.out.println(AcquirePath.class.getResource("/"));System.out.println(AcquirePath.class.getResource("/db/db.properties"));System.out.println(AcquirePath.class.getResource("/util/util.properties"));System.out.println(AcquirePath.class.getResource("/root.properties"));}
}
//打印信息如下
//file:/F:/test/test/target/classes/demo/
//file:/F:/test/test/target/classes/demo/
//file:/F:/test/test/target/classes/db/db.properties
//file:/F:/test/test/target/classes/util/util.properties
//file:/F:/test/test/target/classes/root.properties
//file:/F:/test/test/target/classes/
//file:/F:/test/test/target/classes/db/db.properties
//file:/F:/test/test/target/classes/util/util.properties
//file:/F:/test/test/target/classes/root.properties

从代码中得知,class.getResources(String name)获取资源的途径有两个:

  • 相对位置:不以"/"开头,寻址起点为当前类所在的位置
  • 绝对位置:以"/"开头,寻址起点为当前工程的classpath路径,maven工程中为target/classes目录
  • 不符合上述规则,返回null值

ClassLoader.getResources()获取资源

public static void getPathByClassLoader() {//ClassLoader.getResource()默认其当前位置即classpath,故无需以"/"开头//若以"/"开头,反而让编译器找不到路径System.out.println(AcquirePath.class.getClassLoader().getResource(""));System.out.println(AcquirePath.class.getClassLoader().getResource("."));System.out.println(AcquirePath.class.getClassLoader().getResource("/"));//默认以classpath为寻址起点,故无需以"/"开头,使用绝对路径寻址System.out.println(AcquirePath.class.getClassLoader().getResource("db/db.properties"));System.out.println(AcquirePath.class.getClassLoader().getResource("util/util.properties"));System.out.println(AcquirePath.class.getClassLoader().getResource("root.properties"));//打印结果如下//file:/F:/test/test/target/classes///file:/F:/test/test/target/classes///null//file:/F:/test/test/target/classes/db/db.properties//file:/F:/test/test/target/classes/util/util.properties//file:/F:/test/test/target/classes/root.properties}

如代码所示,ClassLoader.getResources(String name)规则如下

  • 默认以classpath为寻址地点,与类所在目录没必然关系
  • 无需以"/"开头,以classpath为起点,进行绝对寻址
  • 不符合上述规则,返回null

class.getResources与ClassLoader.getResources的区别相关推荐

  1. Class.getResources()和classLoader.getResources()区别

    Class.getResource(String path) path不以'/'开头时,默认是从此类所在的包下取资源: path 以'/'开头时,则是从ClassPath根下获取: package t ...

  2. Java ClassLoader getResources()方法与示例

    ClassLoader类的getResources()方法 (ClassLoader Class getResources() method) getResources() method is ava ...

  3. 【java】ClassLoader.getResources加载资源的顺序

    目录 前言 代码说明 目录结构 FromMultiJar/pom.xml 代码 编译后目录结构 启动命令 ClassLoader.getResources加载资源的顺序 先在本应用(FromMulti ...

  4. 【java】ClassLoader.getResources加载资源

    目录 前言 代码说明 目录结构 FromMultiJar/pom.xml 代码 编译后目录结构 启动命令 执行结果 前言 maven多模块项目 代码说明 目录结构 LoadResources ├─Fr ...

  5. ClassLoader.getResources 能搜索到的资源路径

    代码如下 public static void main(String[] args)throws Exception {ClassLoader cl = xxxx.class.getClassLoa ...

  6. Class.forName和ClassLoader有什么区别

    本文来说下Class.forName 和 ClassLoader 有什么区别 文章目录 概述 实例测试 应用场景 本文小结 概述 在 java 中 Class.forName() 和 ClassLoa ...

  7. classloader.getresources() 介绍

    转载自: https://www.cnblogs.com/bhlsheji/p/4095699.html ◆普通情况下,我们都使用相对路径来获取资源,这种灵活性比較大. 比方当前类为com/bbebf ...

  8. java getresources方法_Java ClassLoader getResources()方法与示例

    ClassLoader类getResources()方法getResources()方法在java.lang包中可用. getResources()方法用于标识具有给定资源名称的所有资源. getRe ...

  9. java getresources方法_java-如何正确使用ClassLoader.getResources()?

    这是获取某个URL对象指向的File对象的最简单方法: File file=new File(url.toURI()); 现在,对于您的具体问题: 在META-INF"目录"中查找 ...

最新文章

  1. 轻量级持久层V2版本代码与模板
  2. JUnit 5 – 早期试用体验 – 第2篇
  3. UBoot常用命令手册
  4. java json jar包_jsonobject jar包下载
  5. 如何通过调试找到自己需要的ABAP增强
  6. Lock VS Monitor
  7. mysql大量数据合并_mysql中将多行数据合并成一行数据
  8. 并发编程实践之公平有界阻塞队列实现
  9. PlaceHolder和Panel的区别【搜藏】
  10. vs创建的c#winform项目出现缺少根文件,无法读取项目文件*.csproj?
  11. Zookeeper 安装部署
  12. mysql存钱用什么类型_电脑液晶显示器面板类型有哪些,显示器用什么面板比较好?...
  13. 维纳滤波python 函数_python实现逆滤波与维纳滤波示例
  14. 线性代数核心思想及应用——行列式习题集(附详解)
  15. Deepin_wine安装超星阅读器及解决乱码问题
  16. poi合并单元格内容重复,只保留一个
  17. 医院患者随访工作信息化建设可行性报告
  18. 林轩田机器学习基石5笔记:训练和测试的不同
  19. 计算机光线太强哪里调整,电脑光线太强怎么调暗
  20. Java中使用JCOM操作Word/Excel对象

热门文章

  1. b365和b360区别
  2. 重要硬件了解(硬盘、内存、CPU、显卡)通常是衡量电脑性能的关键指标
  3. 用cmd运行第一个node.js出现node:internal/modules/cjs/loader:936 throw err;
  4. 三木之Spring事务注解实现
  5. 服务器租用的一些误区
  6. 奥运加速科技产品更新换代
  7. 贝叶斯推断 | 贝叶斯线性回归
  8. Hololens 简体中文版的安装步骤(2018.11)
  9. 基于蒙特卡洛法的定积分求解
  10. 21点小游戏java编程_用Java编写一个二十一点小游戏