`

(转) Class.getResource与ClassLoader.getResource()区别

    博客分类:
  • java
 
阅读更多

class.getResource(String res)的使用

 

该方法是根据类的相对路径来访问资源的。如果该类没有package,则类的根路径是就是当前路径;如果该类有package,则类的根路径是定级包所在的路径。例如:

Drawing没有定义package,Drawing.class与images在相同路径下这样访问:当前路径就是根路径

Image img = (new ImageIcon(Drawing.class.getResource("images/title.gif"))).getImage();

Image img = (new ImageIcon(Drawing.class.getResource("./images/title.gif"))).getImage();

Image img = (new ImageIcon(Drawing.class.getResource("/images/title.gif"))).getImage();

Drawing定义package myjava.gui,Drawing.class位于myjava/gui目录,myjava与images在相同路径下这样访问:

Image img = (new ImageIcon(Drawing.class.getResource("/images/title.gif"))).getImage();(实际中建议使用该方式)

Image img = (new ImageIcon(Drawing.class.getResource("../../images/title.gif"))).getImage();

===================================

Class.getResource()方法实际上委托装入该类的类装载器,返回一个用于读取类文件资源的URL;或者,当指定的类名字不能在当前的classpath中找到时,Class.getResource()方法返回null。

===================================

可以看到,Class的getResource方法,实际上是靠调入这个类的ClassLoader的getResourc

e方法来实现的,如果调入这个类的ClassLoader是原生的BootStrap ClassLoader,这个Cl

assLoader是用C++写成的,在Java中没有相对应的物件。这时候的实现靠的是ClassLoader

的静态方法getSystemResource。

只有当使用Class类的getResource方法的时候,才会有下面介绍的那种算法。

这种算法就是说,

如果你指定的路径以/开头,那么就是从ClassPath的起点开始寻找这个路径。

如果直接以某个名字开头,那么就是从当前包名的目录为起点开始寻找。

所以大家如果用过hibernate就知道,有些表示类到数据库表的映射关系的xml文件就和这

个类的class文件放在一起,这样它就直接使用这个类.class.getResource方法来得到这个

xml文件。

而在使用ClassLoader的getResource方法的时候,永远是以Classpath为直接起点开始寻找

资源的。不用担心从什么包开始寻找的问题。

用Class.getResource不加/就是从当前包开始找,用ClassLoader.getResource不加/就是

直接从Classpath的起点开始寻找。

分享到:
评论
1 楼 maomao15 2013-10-29  

相关推荐

    JAVA如何获取工程下的文件

    与 `Class.getResource` 不同,`ClassLoader.getResource` 会搜索整个类路径,包括标准库和用户自定义的类路径。 ### 注意事项 - 当使用 `Class.getResource` 或 `ClassLoader.getResource` 时,如果资源不在类...

    java文件路径获取

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

    Java 读取资源文件

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

    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中如何得到文件路径.pdf

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

    Java路径问题汇总.pdf

    - 使用`Class.getResource()`或`ClassLoader.getResource()`来加载类路径内的资源。 - 对于文件操作,考虑使用`java.nio.file`包,它提供了更强大的文件系统操作,如`Paths.get()`和`Files`类。 理解并正确处理...

    JAVA获取文件绝对路径的方法

    当你需要获取与类相关的资源文件的绝对路径时,可以使用 `Class.getResource()` 或 `Class.getResourceAsStream()` 方法。这些方法返回一个 `java.net.URL` 对象,可以通过调用 `getPath()` 来获取路径字符串。例如...

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

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

    SpringBoot如何读取war包jar包和Resource资源

    3. Class.getResource() 和 ClassLoader.getResource() 的区别 在读取资源文件时,经常使用 Class.getResource() 或 ClassLoader.getResource() 方法。两种方法都可以读取资源文件,但是它们的使用场景和返回值不同...

    java或wed解决路径问题

    4. `DebitNoteAction.class.getClassLoader().getResource("")` 或 `ClassLoader.getSystemResource("")` 同样返回当前ClassPath的绝对URI路径。 5. `System.getProperty("user.dir")` 返回服务器的相对路径,通常是...

    java classloader classpath 张孝祥

    ### Java ClassLoader与ClassPath详解 #### 一、概述 在Java编程中,类加载机制是十分关键的一个环节。类加载器(`ClassLoader`)负责将编译后的`.class`文件加载到Java虚拟机(JVM)中执行,而类路径(`ClassPath...

    web中的路径问题

    - `DebitNoteAction.class.getClassLoader().getResource("")`和`ClassLoader.getSystemResource("")`都是获取当前类路径的根目录。 5. **使用系统属性获取路径**: - `System.getProperty("user.dir")`:获取...

    Java路径问题最终解决方案.doc

    1. 使用`FileTest.class.getResource("")`,得到当前类FileTest.class所在目录的URI,但不包含自身。 2. 使用`FileTest.class.getResource("/")`,获取当前classpath的绝对URI路径。 3. 使用`Thread.currentThread()...

    java文件路径操作详细[归类].pdf

    例如,`ClassLoader`类的`getResource(String name)`和`getResourceAsStream(String name)`方法,以及`ResourceBundle`类的`getBundle(String path)`都是基于此类路径查找资源。 然而,尽管相对路径在使用上更为...

    JAVA输出各种信息

    `ClassLoader`类提供了获取资源路径的方法,例如`ClassLoader.getSystemResource("")`可以获取系统类加载器的资源路径,而`Class_Name.class.getResource("/")`和`Class_Name.class.getResource("")`则分别用于获取...

    java中File的相对路径与绝对路径总结

    String f = Hello.class.getClassLoader().getResource("4.txt").getPath(); ``` - 需要注意的是,这种方式同样只能获取到类路径中的资源。 #### 注意事项 - **使用相对路径时**,务必确保路径的正确性,否则...

    JAVA获取各种路径总结

    System.out.println(FileTest.class.getClassLoader().getResource("")); System.out.println(ClassLoader.getSystemResource("")); System.out.println(FileTest.class.getResource("")); System.out.println...

    Java中获取文件路径的几种方式

    使用`Class.getResource()`和`ClassLoader.getResource()` 这两种方法用于获取类路径下的资源文件路径,特别适用于JAR包或类加载器管理的资源。 ##### 示例代码: ```java URL xmlPath = this.getClass()....

Global site tag (gtag.js) - Google Analytics