`
wangxuliangboy
  • 浏览: 210652 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Class.getResource()

阅读更多
public URL getResource(String name)
查找带有给定名称的资源,查找给定类相关的资源的规则是通过定义类的 class loader 实现的。此方法委托给此对象的类加载器。如果此对象通过引导类加载器加载,则此方法将委托给 ClassLoader.getSystemResource(java.lang.String)

在委托前,使用下面的算法从给定的资源名构造一个绝对资源名:

  • 如果 name'/'  开始,则绝对资源名是 '/' 后面的 name 的一部分。
  • 否则,绝对名具有以下形式:
       modified_package_name/name
    

    其中 modified_package_name 是此对象的包名,该名用 '/' 取代了 '.' ('\u002e')。

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;
    }

 

其实最后还是要把"/"去掉的...

 

分享到:
评论

相关推荐

    Java路径问题解决方案汇集

     1、 URLTest.class.getResource(/).getPath();  URLTest.class.getResource(/).getFile();  URLTest.class.getClassLoader().getResource().getPath();  Thread.currentThread()....

    java-loadresource.rar

    本篇文章将详细探讨Java提供的两种主要方法:`Class.getResource`和`Class.getResourceAsStream`,用于加载类路径下的资源文件。 首先,`Class.getResource`方法返回一个`URL`对象,它表示资源的位置。这个方法接受...

    通讯录管理系统文档 Java设计

    ### 通讯录管理系统知识点概述 #### 一、系统概述与重要性 随着社会快速发展与人际交往日益频繁,高效管理个人及工作联系人信息显得尤为重要。一个完善的通讯录管理系统不仅可以帮助用户快速查找联系人,还能有效...

    java文件路径获取

    - 当使用`Class.getResource`或`Class.getResourceAsStream`时,如果路径不以 `/` 开头,那么查找将从调用该方法的类所在的包开始。 - 当使用`ClassLoader.getResource`或`ClassLoader.getResourceAsStream`时,路径...

    java项目相对路径与绝对路径问题分析

    1. `FileTest.class.getResource("")`:返回当前类`FileTest.class`所在目录的URI,但不包括`FileTest.class`自身。例如,如果`FileTest`位于`com/test`包下,它将返回`file:/D:/java/eclipse32/workspace/jbpmtest3...

    Java-recourse.rar_java读取recouse

    你可以通过`Thread.currentThread().getContextClassLoader().getResource()`或`YourClass.class.getResource()`来获取`URL`对象,然后使用`InputStream`读取资源内容。例如: ```java URL resource = getClass()....

    java中相对路径与绝对路径的问题

    例如,我们可以使用 `FileTest.class.getResource("")` 来获取当前类的相对路径,使用 `FileTest.class.getResource("/")` 来获取当前类的绝对路径。 获得执行类的当前路径 在 Java 编程中,我们可以使用 `System....

    JAVA中如何得到文件路径.pdf

    System.out.println(Test.class.getClassLoader().getResource("")); ``` 4. **使用`ClassLoader.getSystemResource("")`**: - 获取系统类加载器的资源路径。 - 示例代码: ```java System.out.println...

    Java 读取资源文件

    1. 使用`Class.getResource()`和`Class.getResourceAsStream()` - `Class.getResource(String path)`方法返回一个`URL`对象,表示相对于当前类的类路径上的资源的位置。例如,如果你有一个名为`config.properties`...

    java项目中获取路径详解

    在静态方法中,可以使用 `Test.class.getResource("").getPath()`,而在非静态方法中,可以使用 `this.getClass().getResource("").getPath()` 或 `Test.class.getResource("").getPath()`。这两个方法都可以获取...

    Java路径问题汇总.pdf

    当使用`TestURL().class.getResource("").getPath()`或`TestURL().class.getResource("").getFile()`获取路径时,如果路径中包含空格或其他特殊字符,如%,#,[]等,Java会对其进行URL编码。空格会被编码为"%20"。...

    大一课程设计,java开发的切水果小游戏.zip

    java课程设计大作业,java、算法练手项目,适合初学java、数据结构的同学拿来学习研究,基于java、GUI开发的小游戏,程序都经过测试,可以直接运行,资源含程序运行所需的源码、资源文件等全部数据,有需要的可放心...

    解决java打包之后无法加载静态资源的问题SWTResourceManager.java源码

    这是因为通过class.getResource()方法在IDEA中运行的路径和生成jar包获取的的路径是不同的。打成jar包后,获取图片的路径中有"xxx.jar!"这里面的内容是不能够被操作系统识别出来的,因此直接通过路径来获取文件是不...

    java或wed解决路径问题

    一种方法是利用Java的类加载机制,通过`Class`对象的`getClassLoader().getResource("")`方法获取`ClassPath`,然后进一步处理以得到WebRoot。但这种方法只适用于类位于`WebRoot/WEB-INF/classes`下,如果类被打包到...

    JAVA如何获取工程下的文件

    下面我们将详细探讨两种常用的方法:`Class.getResource` 和 `ClassLoader.getResource`。 ### 1. `Class.getResource` `Class.getResource` 方法允许我们通过类对象获取资源文件。这个方法返回一个 `URL` 对象,...

    Java飞机大战源码

    《深入解析Java飞机大战源码》 在编程学习的道路上,实践是检验理论的最好方式。"Java飞机大战源码"就是一个很好的实例,它适用于初学者掌握Java面向对象编程的基本概念和技巧。在这个项目中,开发者运用了Java ...

    解决j2se中导出jar文件不能显示图片问题

    ImageIcon image = new ImageIcon(this.class.getResource("icons/logo.gif")); 在这种方法中,需要注意图片的路径问题。如果将所有资源打包为一个 Jar 文件,例如 andy.jar,而类位于一个包中,例如 andycpp,那么...

    web中的路径问题

    - `DebitNoteAction.class.getResource("")`:获取`DebitNoteAction`类所在的路径,输出结果类似于`file:/D:/eclipse/springTest/WebRoot/WEB-INF/classes/atacarnet/src/com/evi/modules/atacarnet/action/`。...

    java读取resource目录下文件的方法示例

    1. 使用`Class.getResource`或`ClassLoader.getResource`,这两个方法都需要传入相对类路径的字符串。 2. 使用Guava的`Resources.getResource`,它提供了一种更简洁的接口,同时支持绝对和相对路径。 理解并掌握...

Global site tag (gtag.js) - Google Analytics