class.getResources与ClassLoader.getResources的区别
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的区别相关推荐
- Class.getResources()和classLoader.getResources()区别
Class.getResource(String path) path不以'/'开头时,默认是从此类所在的包下取资源: path 以'/'开头时,则是从ClassPath根下获取: package t ...
- Java ClassLoader getResources()方法与示例
ClassLoader类的getResources()方法 (ClassLoader Class getResources() method) getResources() method is ava ...
- 【java】ClassLoader.getResources加载资源的顺序
目录 前言 代码说明 目录结构 FromMultiJar/pom.xml 代码 编译后目录结构 启动命令 ClassLoader.getResources加载资源的顺序 先在本应用(FromMulti ...
- 【java】ClassLoader.getResources加载资源
目录 前言 代码说明 目录结构 FromMultiJar/pom.xml 代码 编译后目录结构 启动命令 执行结果 前言 maven多模块项目 代码说明 目录结构 LoadResources ├─Fr ...
- ClassLoader.getResources 能搜索到的资源路径
代码如下 public static void main(String[] args)throws Exception {ClassLoader cl = xxxx.class.getClassLoa ...
- Class.forName和ClassLoader有什么区别
本文来说下Class.forName 和 ClassLoader 有什么区别 文章目录 概述 实例测试 应用场景 本文小结 概述 在 java 中 Class.forName() 和 ClassLoa ...
- classloader.getresources() 介绍
转载自: https://www.cnblogs.com/bhlsheji/p/4095699.html ◆普通情况下,我们都使用相对路径来获取资源,这种灵活性比較大. 比方当前类为com/bbebf ...
- java getresources方法_Java ClassLoader getResources()方法与示例
ClassLoader类getResources()方法getResources()方法在java.lang包中可用. getResources()方法用于标识具有给定资源名称的所有资源. getRe ...
- java getresources方法_java-如何正确使用ClassLoader.getResources()?
这是获取某个URL对象指向的File对象的最简单方法: File file=new File(url.toURI()); 现在,对于您的具体问题: 在META-INF"目录"中查找 ...
最新文章
- 轻量级持久层V2版本代码与模板
- JUnit 5 – 早期试用体验 – 第2篇
- UBoot常用命令手册
- java json jar包_jsonobject jar包下载
- 如何通过调试找到自己需要的ABAP增强
- Lock VS Monitor
- mysql大量数据合并_mysql中将多行数据合并成一行数据
- 并发编程实践之公平有界阻塞队列实现
- PlaceHolder和Panel的区别【搜藏】
- vs创建的c#winform项目出现缺少根文件,无法读取项目文件*.csproj?
- Zookeeper 安装部署
- mysql存钱用什么类型_电脑液晶显示器面板类型有哪些,显示器用什么面板比较好?...
- 维纳滤波python 函数_python实现逆滤波与维纳滤波示例
- 线性代数核心思想及应用——行列式习题集(附详解)
- Deepin_wine安装超星阅读器及解决乱码问题
- poi合并单元格内容重复,只保留一个
- 医院患者随访工作信息化建设可行性报告
- 林轩田机器学习基石5笔记:训练和测试的不同
- 计算机光线太强哪里调整,电脑光线太强怎么调暗
- Java中使用JCOM操作Word/Excel对象
热门文章
- b365和b360区别
- 重要硬件了解(硬盘、内存、CPU、显卡)通常是衡量电脑性能的关键指标
- 用cmd运行第一个node.js出现node:internal/modules/cjs/loader:936 throw err;
- 三木之Spring事务注解实现
- 服务器租用的一些误区
- 奥运加速科技产品更新换代
- 贝叶斯推断 | 贝叶斯线性回归
- Hololens 简体中文版的安装步骤(2018.11)
- 基于蒙特卡洛法的定积分求解
- 21点小游戏java编程_用Java编写一个二十一点小游戏