]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

相关文章

前端 CSS 动态设置样式::class、:style 等技巧(推荐)

《前端CSS动态设置样式::class、:style等技巧(推荐)》:本文主要介绍了Vue.js中动态绑定类名和内联样式的两种方法:对象语法和数组语法,通过对象语法,可以根据条件动态切换类名或样式;通过数组语法,可以同时绑定多个类名或样式,此外,还可以结合计算属性来生成复杂的类名或样式对象,详细内容请阅读本文,希望能对你有所帮助...

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

解决Spring运行时报错:Consider defining a bean of type ‘xxx.xxx.xxx.Xxx‘ in your configuration

《解决Spring运行时报错:Considerdefiningabeanoftype‘xxx.xxx.xxx.Xxx‘inyourconfiguration》该文章主要讲述了在使用S... 目录问题分析解决方案总结问题Description:Parameter 0 of constructor in x

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