]XXX.class.getResource()与XXX.class.getClassLoader().getResource(url)研究

2024-05-01 17:38

本文主要是介绍]XXX.class.getResource()与XXX.class.getClassLoader().getResource(url)研究,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

zz:http://m.blog.csdn.net/blog/lushuaiyin/8603081

获取文件路径是很常用的操作,但在这之前你必须对url的相对路径和绝对路径有所了解。

如果我想获取工程的路径,或者说我想获取工程里某个文件应该怎么办呢?

方法就是用class获取Resource。

比如我们写个类叫XXX.java

获取资源文件就可以使用2个方法,分别是

XXX.class.getResource()与XXX.class.getClassLoader().getResource(url)。
关于怎么获取和这两者的区别,做个试验就很清楚了。

现在给出我的文件结构:

src(源文件夹)
|_org
|_path
| |_child
| | |FileTwo.txt
| |
| |PathUtil.java
| |FileOne.txt
|
|_path2
|fileThree.txt
如图:



废话不多说,看试验吧:

PathUtil
package org.path;

import java.io.File;

/**
* XXX.class.getResource()与XXX.class.getClassLoader().getResource(url)研究
* @author lushuaiyin
*
*/
public class PathUtil {

public static void main(String[] args) {
String path1=PathUtil.class.getResource("").getPath();
System.out.println("path1:"+path1);

String path2=PathUtil.class.getResource("/").getPath();
System.out.println("path2:"+path2);

String path3=PathUtil.class.getClassLoader().getResource("").getPath();
System.out.println("path3:"+path3);

// String path4=PathUtil.class.getClassLoader().getResource("/").getPath();
// System.out.println("path4:"+path4);//空指针报错


System.out.println("-------------------------------------------");

//知道XXX.class.getResource(url)和XXX.class.getClassLoader().getResource(url)的区别后,
//下面开始使用这2个方法找到我们想要的文件

//一:找和本class同包下的文件,例如FileOne.txt
//方式1(从本类路径开始找)
File fileOne1=new File(PathUtil.class.getResource("FileOne.txt").getFile());
System.out.println("fileOne1:"+PathUtil.class.getResource("FileOne.txt").getFile());
//方式2(从根路径开始找)
File fileOne2=new File(PathUtil.class.getClassLoader().getResource("org/path/FileOne.txt").getFile());
System.out.println("fileOne2:"+PathUtil.class.getClassLoader().getResource("org/path/FileOne.txt").getFile());


System.out.println("");

//二:找和本class同包下的子目录下的文件,例如FileTwo.txt
//方式1(从本类路径开始找)
File fileTwo1=new File(PathUtil.class.getResource("child/FileTwo.txt").getFile());
System.out.println("fileTwo1:"+PathUtil.class.getResource("child/FileTwo.txt").getFile());
//方式2(从根路径开始找)
File fileTwo2=new File(PathUtil.class.getClassLoader().getResource("org/path/child/FileTwo.txt").getFile());
System.out.println("fileTwo2:"+PathUtil.class.getClassLoader().getResource("org/path/child/FileTwo.txt").getFile());


System.out.println("");

//三:找和本class父目录同包下的文件,例如FileThree.txt
//方式1(从本类路径开始找)
File fileThree1=new File(PathUtil.class.getResource("../path2/FileThree.txt").getFile());
System.out.println("fileThree1:"+PathUtil.class.getResource("../path2/FileThree.txt").getFile());
//方式2(从根路径开始找)
File fileThree2=new File(PathUtil.class.getClassLoader().getResource("org/path2/FileThree.txt").getFile());
System.out.println("fileThree2:"+PathUtil.class.getClassLoader().getResource("org/path2/FileThree.txt").getFile());


}


/*
首先给出文件路径结构:

src(源文件夹)
|_org
|_path
| |_child
| | |FileTwo.txt
| |
| |PathUtil.java
| |FileOne.txt
|
|_path2
|fileThree.txt

XXX.class.getResource(url)
这个是从当前类XXX的路径开始找。

XXX.class.getClassLoader().getResource(url)
这个是从根目录开始找。
所以PathUtil.class.getClassLoader().getResource("/").getPath()会报错。


打印:

path1:/D:/ChinaDevelopmentBankJBPM/workSpace/frame/webapp/WEB-INF/classes/org/path/
path2:/D:/ChinaDevelopmentBankJBPM/workSpace/frame/webapp/WEB-INF/classes/
path3:/D:/ChinaDevelopmentBankJBPM/workSpace/frame/webapp/WEB-INF/classes/
-------------------------------------------
fileOne1:/D:/ChinaDevelopmentBankJBPM/workSpace/frame/webapp/WEB-INF/classes/org/path/FileOne.txt
fileOne2:/D:/ChinaDevelopmentBankJBPM/workSpace/frame/webapp/WEB-INF/classes/org/path/FileOne.txt

fileTwo1:/D:/ChinaDevelopmentBankJBPM/workSpace/frame/webapp/WEB-INF/classes/org/path/child/FileTwo.txt
fileTwo2:/D:/ChinaDevelopmentBankJBPM/workSpace/frame/webapp/WEB-INF/classes/org/path/child/FileTwo.txt

fileThree1:/D:/ChinaDevelopmentBankJBPM/workSpace/frame/webapp/WEB-INF/classes/org/path2/FileThree.txt
fileThree2:/D:/ChinaDevelopmentBankJBPM/workSpace/frame/webapp/WEB-INF/classes/org/path2/FileThree.txt


*/
}


上面的试验清楚明了,唯一要注意的地方就是:

PathUtil.class.getResource("").getPath() 得到本类路径
PathUtil.class.getResource("/").getPath() 得到根路径
PathUtil.class.getClassLoader().getResource("").getPath() 得到根路径
PathUtil.class.getClassLoader().getResource("/").getPath() 空指针报错,因为它从根路径找文件,你给的url不是文件的url

这篇关于]XXX.class.getResource()与XXX.class.getClassLoader().getResource(url)研究的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/952283

相关文章

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

使用Python实现批量访问URL并解析XML响应功能

《使用Python实现批量访问URL并解析XML响应功能》在现代Web开发和数据抓取中,批量访问URL并解析响应内容是一个常见的需求,本文将详细介绍如何使用Python实现批量访问URL并解析XML响... 目录引言1. 背景与需求2. 工具方法实现2.1 单URL访问与解析代码实现代码说明2.2 示例调用

关于Java内存访问重排序的研究

《关于Java内存访问重排序的研究》文章主要介绍了重排序现象及其在多线程编程中的影响,包括内存可见性问题和Java内存模型中对重排序的规则... 目录什么是重排序重排序图解重排序实验as-if-serial语义内存访问重排序与内存可见性内存访问重排序与Java内存模型重排序示意表内存屏障内存屏障示意表Int

SpringBoot实现基于URL和IP的访问频率限制

《SpringBoot实现基于URL和IP的访问频率限制》在现代Web应用中,接口被恶意刷新或暴力请求是一种常见的攻击手段,为了保护系统资源,需要对接口的访问频率进行限制,下面我们就来看看如何使用... 目录1. 引言2. 项目依赖3. 配置 Redis4. 创建拦截器5. 注册拦截器6. 创建控制器8.

提示:Decompiled.class file,bytecode version如何解决

《提示:Decompiled.classfile,bytecodeversion如何解决》在处理Decompiled.classfile和bytecodeversion问题时,通过修改Maven配... 目录问题原因总结问题1、提示:Decompiled .class file,China编程 bytecode

Anaconda 中遇到CondaHTTPError: HTTP 404 NOT FOUND for url的问题及解决办法

最近在跑一个开源项目遇到了以下问题,查了很多资料都大(抄)同(来)小(抄)异(去)的,解决不了根本问题,费了很大的劲终于得以解决,记录如下: 1、问题及过程: (myenv) D:\Workspace\python\XXXXX>conda install python=3.6.13 Solving environment: done.....Proceed ([y]/n)? yDownloa

一种改进的red5集群方案的应用、基于Red5服务器集群负载均衡调度算法研究

转自: 一种改进的red5集群方案的应用: http://wenku.baidu.com/link?url=jYQ1wNwHVBqJ-5XCYq0PRligp6Y5q6BYXyISUsF56My8DP8dc9CZ4pZvpPz1abxJn8fojMrL0IyfmMHStpvkotqC1RWlRMGnzVL1X4IPOa_  基于Red5服务器集群负载均衡调度算法研究 http://ww

生信圆桌x生信分析平台:助力生物信息学研究的综合工具

介绍 少走弯路,高效分析;了解生信云,访问 【生信圆桌x生信专用云服务器】 : www.tebteb.cc 生物信息学的迅速发展催生了众多生信分析平台,这些平台通过集成各种生物信息学工具和算法,极大地简化了数据处理和分析流程,使研究人员能够更高效地从海量生物数据中提取有价值的信息。这些平台通常具备友好的用户界面和强大的计算能力,支持不同类型的生物数据分析,如基因组、转录组、蛋白质组等。

开题报告中的研究方法设计:AI能帮你做什么?

AIPaperGPT,论文写作神器~ https://www.aipapergpt.com/ 大家都准备开题报告了吗?研究方法部分是不是已经让你头疼到抓狂? 别急,这可是大多数人都会遇到的难题!尤其是研究方法设计这一块,选定性还是定量,怎么搞才能符合老师的要求? 每次到这儿,头脑一片空白。 好消息是,现在AI工具火得一塌糊涂,比如ChatGPT,居然能帮你在研究方法这块儿上出点主意。是不

研究人员在RSA大会上演示利用恶意JPEG图片入侵企业内网

安全研究人员Marcus Murray在正在旧金山举行的RSA大会上公布了一种利用恶意JPEG图片入侵企业网络内部Windows服务器的新方法。  攻击流程及漏洞分析 最近,安全专家兼渗透测试员Marcus Murray发现了一种利用恶意JPEG图片来攻击Windows服务器的新方法,利用该方法还可以在目标网络中进行特权提升。几天前,在旧金山举行的RSA大会上,该Marcus现场展示了攻击流程,