Java获取路径时Class.getResource()和ClassLoader.getResource()区别

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

环境信息:

系统:windows 10;
Java版本:jdk8;
开发工具:idea 2017.3.2;

涉及方法:

Class.getResource();
ClassLoader.getResource();
Class.getResourceAsStream();
ClassLoader().getResourceAsStream();

工程结构:

在这里插入图片描述

测试代码:

package lc.util;public class ResourceDemo {public static void main(String[] args) {ResourceDemo resourceDemo = new ResourceDemo();//Class.getResource路径System.out.println("1.ResourceDemo.class.getResource(\"\")路径:"+ResourceDemo.class.getResource("").getPath());System.out.println("2.ResourceDemo.class.getResource(\"/\")路径:"+ResourceDemo.class.getResource("/").getPath());System.out.println("3.ResourceDemo.class.getResource(\"/\")路径:"+resourceDemo.getClass().getResource("/").getPath());//ClassLoader().getResource路径System.out.println("4.ResourceDemo.class.getClassLoader().getResource()路径:"+ResourceDemo.class.getClassLoader().getResource("").getPath());System.out.println("5.ResourceDemo.class.getClassLoader().getResource(\"/\")路径:"+ResourceDemo.class.getClassLoader().getResource("/").getPath());//从不同位置取文件//1.从当前文件的子目录找文件,如果文件不存在调用getFile()方法会报空指针异常System.out.println(ResourceDemo.class.getResource("resdemo/res1.properties").getFile().toString());System.out.println(resourceDemo.getClass().getResource("resdemo/res1.properties").getFile().toString());//2.从当前文件同级目录找文件,如果文件不存在调用getFile()方法会报空指针异常System.out.println(ResourceDemo.class.getResource("res2.properties").getFile().toString());//3.从classpath根目录找文件,如果文件不存在调用getFile()方法会报空指针异常System.out.println(ResourceDemo.class.getResource("/res3.properties").getFile().toString());System.out.println(ResourceDemo.class.getClassLoader().getResource("res4.properties").getFile().toString());}
}

打印结果:

1.ResourceDemo.class.getResource("")路径:/E:/Workspace/iarp/target/classes/lc/util/
2.ResourceDemo.class.getResource("/")路径:/E:/Workspace/iarp/target/classes/
3.ResourceDemo.class.getResource("/")路径:/E:/Workspace/iarp/target/classes/
4.ResourceDemo.class.getClassLoader().getResource()路径:/E:/Workspace/iarp/target/classes/
5.ResourceDemo.class.getClassLoader().getResource("/")路径:null
/E:/Workspace/iarp/target/classes/lc/util/resdemo/res1.properties
/E:/Workspace/iarp/target/classes/lc/util/resdemo/res1.properties
/E:/Workspace/iarp/target/classes/lc/util/res2.properties
/E:/Workspace/iarp/target/classes/res3.properties
/E:/Workspace/iarp/target/classes/res4.properties

问题总结:

从结果显示来看,

1.Class.getResource(“”),即不以”/”开头的路径,是从当前Class类所在的包下取路径;
2.Class.getResource(“/”),即以”/”开头的路径,是从ClassPath根目录下取路径;
3.ClassLoader.getResource(),即不以”/”开头的路径,是从ClassPath根目录下取路径;
4.ClassLoader.getResource(“/”),即以”/”开头的路径,结果为null;
5.Class.getResourceAsStream()和Class.getResource相同;
6.ClassLoader().getResourceAsStream()和ClassLoader.getResource()相同;

相关说明:

这里测试工具为idea,Classpath路径为target目录;如果开发工具为eclipse,Classpath路径为bin目录。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/61912.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【插入排序】直接插入排序 与 希尔排序

目录 1. 排序的概念: 2.插入排序基本思想 3.直接插入排序 4.希尔排序 1. 排序的概念: 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性&#xf…

【ECharts】树图

将3级改成4级 demo上是3层,如何实现4层。 initialTreeDepth: 4

竞赛项目 深度学习图像风格迁移

文章目录 0 前言1 VGG网络2 风格迁移3 内容损失4 风格损失5 主代码实现6 迁移模型实现7 效果展示8 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习图像风格迁移 - opencv python 该项目较为新颖,适合作为竞赛课题…

微服务间消息传递

微服务间消息传递 微服务是一种软件开发架构,它将一个大型应用程序拆分为一系列小型、独立的服务。每个服务都可以独立开发、部署和扩展,并通过轻量级的通信机制进行交互。 应用开发 common模块中包含服务提供者和服务消费者共享的内容provider模块是…

程序员怎么利用ChatGPT解放双手=摸鱼?

目录 1. 当你遇到问题时为你生成代码ChatGPT 最明显的用途是根据查询编写代码。我们都会遇到不知道如何完成任务的情况,而这正是人工智能可以派上用场的时候。例如,假设我不知道如何使用 Python 编写 IP 修改器,只需查询 AI,它就…

【每日一题】1572. 矩阵对角线元素的和

【每日一题】1572. 矩阵对角线元素的和 1572. 矩阵对角线元素的和题目描述解题思路 1572. 矩阵对角线元素的和 题目描述 给你一个正方形矩阵 mat,请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 示例 1&a…

【广州华锐视点】VR燃气轮机故障判断模拟演练系统

VR燃气轮机故障判断模拟演练系统由广州华锐视点开发,是一款基于虚拟现实技术的教育工具,旨在为学生提供一个安全、高效、互动的学习环境,帮助他们更好地掌握燃气轮机的故障诊断技能。 这款VR实训软件能够模拟真实的燃气轮机故障诊断场景&…

机器学习 day32(神经网络如何解决高方差和高偏差)

解决高偏差和高方差的新方法 之前,我们需要通过选取多项式次数以及正则化参数λ,来平衡高方差和高偏差 只要训练集不是特别大,那么一个大型的神经网络总能很好的适应训练集,即它的Jtrain很低由此可以得出,若要减小Jt…

Eolink 出席 QECon 大会,引领「AI+API」技术的革新浪潮

7月28日-29日,第八届 QECon 质量效能大会在北京成功召开。大会聚焦“数生智慧,高质量发展新引擎”,深入探讨如何利用数字化和智能化技术推动软件质量的发展,进而为高质量的经济发展提供新的引擎。作为国内 API 全生命周期解决方案…

函数的递归与迭代

递归经典问题:(自行尝试) 1、汉诺塔问题 2、青蛙跳台阶问题 练习1、 练习2、

APP备案明明是好事,为啥有些人反对呢?

我是卢松松,点点上面的头像,欢迎关注我哦! APP和小程序备案, 这事在网上闹的沸沸扬扬,明明是好事,可为啥那么多人反对呢?而且最近出现了好多阴阳怪气的声音。 话说从2005年3月起,国内所有的网…

AIGC创世计划设计视频课程

课程介绍下载 AIGC创世计划设计视频课程是一门专注于创意设计的课程。通过视频教学,学习者将了解到关于创意设计的理论知识和实践技巧,并能够运用这些知识和技巧进行创作。本课程涵盖了多个设计领域,包括平面设计、产品设计、UI/UX设计等。无…