public URL getResource(String name)
查找带有给定名称的资源,查找给定类相关的资源的规则是通过定义类的 class loader 实现的。此方法委托给此对象的类加载器。如果此对象通过引导类加载器加载,则此方法将委托给 ClassLoader.getSystemResource(java.lang.String)
。
在委托前,使用下面的算法从给定的资源名构造一个绝对资源名:
Class.getResource(""); 获取classpath
Class.getResource("JMF.class"); 代表获取相于类路径当前包下的SendService.class的类路径.
/D:/bak/upload/upload/WebRoot/WEB-INF/classes/jmf/JMF.class-------->打印出的结果
Class.getResource("/jmf/WebCamSwing.class"); /jmf/WebCamSwing.class->代表相于类路径的绝对路径
file:/D:/bak/upload/upload/WebRoot/WEB-INF/classes/jmf/JMF.class -------->打印出的结果
我们怎么获得Object的类路径:
Class.getResource("/java/lang/Object.class") 因为Object是通过引导类加载器(BootStrapClassLoader)加载的,所以此方法通过系统类加载器来查找资料, 所以我们要指定类的绝对路径/java/lang/Object.class
public java.net.URL getResource(String name) {
name = resolveName(name);
ClassLoader cl = getClassLoader0();
if (cl==null) {
// A system class.
return ClassLoader.getSystemResource(name);
}
return cl.getResource(name);
}
我们来看看如何通过系统类加载器来查找Object:
Class.getClassLoader().getSystemResource("java/lang/Object.class")
打印出来的结果多是:
jar:file:/E:/Program/Java/jdk1.5.0_15/jre/lib/rt.jar!/java/lang/Object.class
为什么getResource("")前面要加"/",而getSystemResource("")前面不用加呢?
private String resolveName(String name) {
if (name == null) {
return name;
}
if (!name.startsWith("/")) {
Class c = this;
while (c.isArray()) {
c = c.getComponentType();
}
String baseName = c.getName();
int index = baseName.lastIndexOf('.');
if (index != -1) {
name = baseName.substring(0, index).replace('.', '/')
+"/"+name;
}
} else {
name = name.substring(1);
}
return name;
}
其实最后还是要把"/"去掉的...
分享到:
相关推荐
1、 URLTest.class.getResource(/).getPath(); URLTest.class.getResource(/).getFile(); URLTest.class.getClassLoader().getResource().getPath(); Thread.currentThread()....
本篇文章将详细探讨Java提供的两种主要方法:`Class.getResource`和`Class.getResourceAsStream`,用于加载类路径下的资源文件。 首先,`Class.getResource`方法返回一个`URL`对象,它表示资源的位置。这个方法接受...
### 通讯录管理系统知识点概述 #### 一、系统概述与重要性 随着社会快速发展与人际交往日益频繁,高效管理个人及工作联系人信息显得尤为重要。一个完善的通讯录管理系统不仅可以帮助用户快速查找联系人,还能有效...
- 当使用`Class.getResource`或`Class.getResourceAsStream`时,如果路径不以 `/` 开头,那么查找将从调用该方法的类所在的包开始。 - 当使用`ClassLoader.getResource`或`ClassLoader.getResourceAsStream`时,路径...
1. `FileTest.class.getResource("")`:返回当前类`FileTest.class`所在目录的URI,但不包括`FileTest.class`自身。例如,如果`FileTest`位于`com/test`包下,它将返回`file:/D:/java/eclipse32/workspace/jbpmtest3...
你可以通过`Thread.currentThread().getContextClassLoader().getResource()`或`YourClass.class.getResource()`来获取`URL`对象,然后使用`InputStream`读取资源内容。例如: ```java URL resource = getClass()....
例如,我们可以使用 `FileTest.class.getResource("")` 来获取当前类的相对路径,使用 `FileTest.class.getResource("/")` 来获取当前类的绝对路径。 获得执行类的当前路径 在 Java 编程中,我们可以使用 `System....
System.out.println(Test.class.getClassLoader().getResource("")); ``` 4. **使用`ClassLoader.getSystemResource("")`**: - 获取系统类加载器的资源路径。 - 示例代码: ```java System.out.println...
1. 使用`Class.getResource()`和`Class.getResourceAsStream()` - `Class.getResource(String path)`方法返回一个`URL`对象,表示相对于当前类的类路径上的资源的位置。例如,如果你有一个名为`config.properties`...
在静态方法中,可以使用 `Test.class.getResource("").getPath()`,而在非静态方法中,可以使用 `this.getClass().getResource("").getPath()` 或 `Test.class.getResource("").getPath()`。这两个方法都可以获取...
当使用`TestURL().class.getResource("").getPath()`或`TestURL().class.getResource("").getFile()`获取路径时,如果路径中包含空格或其他特殊字符,如%,#,[]等,Java会对其进行URL编码。空格会被编码为"%20"。...
java课程设计大作业,java、算法练手项目,适合初学java、数据结构的同学拿来学习研究,基于java、GUI开发的小游戏,程序都经过测试,可以直接运行,资源含程序运行所需的源码、资源文件等全部数据,有需要的可放心...
这是因为通过class.getResource()方法在IDEA中运行的路径和生成jar包获取的的路径是不同的。打成jar包后,获取图片的路径中有"xxx.jar!"这里面的内容是不能够被操作系统识别出来的,因此直接通过路径来获取文件是不...
一种方法是利用Java的类加载机制,通过`Class`对象的`getClassLoader().getResource("")`方法获取`ClassPath`,然后进一步处理以得到WebRoot。但这种方法只适用于类位于`WebRoot/WEB-INF/classes`下,如果类被打包到...
下面我们将详细探讨两种常用的方法:`Class.getResource` 和 `ClassLoader.getResource`。 ### 1. `Class.getResource` `Class.getResource` 方法允许我们通过类对象获取资源文件。这个方法返回一个 `URL` 对象,...
《深入解析Java飞机大战源码》 在编程学习的道路上,实践是检验理论的最好方式。"Java飞机大战源码"就是一个很好的实例,它适用于初学者掌握Java面向对象编程的基本概念和技巧。在这个项目中,开发者运用了Java ...
ImageIcon image = new ImageIcon(this.class.getResource("icons/logo.gif")); 在这种方法中,需要注意图片的路径问题。如果将所有资源打包为一个 Jar 文件,例如 andy.jar,而类位于一个包中,例如 andycpp,那么...
- `DebitNoteAction.class.getResource("")`:获取`DebitNoteAction`类所在的路径,输出结果类似于`file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/atacarnet/src/com/evi/modules/atacarnet/action/`。...
1. 使用`Class.getResource`或`ClassLoader.getResource`,这两个方法都需要传入相对类路径的字符串。 2. 使用Guava的`Resources.getResource`,它提供了一种更简洁的接口,同时支持绝对和相对路径。 理解并掌握...