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

class.getResourceAsStream()与ClassLoader.getResourceAsStream()的区别

    博客分类:
  • Java
阅读更多
在jar包里获得流形式的资源有两种方法,一个是Class.getResourceAsStream(String),另一个是ClassLoader.getResourceAsStream(String)。
实际上前一个只是引用了后一个的方法。不过其中加了一些判断。
而就是这些判断导致了两者之间的差异。参见代码。
    // java.lang.Class
    public InputStream getResourceAsStream(String name) {
        name = resolveName(name);
        ClassLoader cl = getClassLoader0();
        if (cl==null) { // 如果找不到ClassLoader,就寻找系统资源
            // A system class.
            return ClassLoader.getSystemResourceAsStream(name);
        }
        return cl.getResourceAsStream(name); // 否则就调用ClassLoader对应方法
    }
//...
    /**
     * Add a package name prefix if the name is not absolute Remove leading "/"
     * if name is absolute
     */
    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;
    }

由此可见,如果使用Class.getResourceAsStream(String)方法,则资源名要么设置为类所在包的相对名,要么设置为全路径名,而如果使用ClassLoader的相应方法,则要设置为不带根的全路径名
1
0
分享到:
评论

相关推荐

    Java 使用getClass().getResourceAsStream()方法获取资源

    在Java编程中,`getClass().getResourceAsStream()`是一个非常实用的方法,用于从类路径(Classpath)中加载资源,如配置文件、图片、字体等。这个方法返回一个`InputStream`对象,可以通过它读取到资源文件的内容。...

    Java文件路径详解

    在 Java 中,有两种方式可以获取文件路径,即使用 Class.getResourceAsStream() 和 ClassLoader.getResourceAsStream()。 Class.getResourceAsStream() Class.getResourceAsStream() 方法返回的是一个 InputStream...

    java文件路径获取

    - 当使用`ClassLoader.getResource`或`ClassLoader.getResourceAsStream`时,路径必须以 `/` 开头,否则可能无法找到资源。 - `getClassLoader().getResource("/")`会返回`classpath`的根目录,但`getClassLoader()....

    Java 读取资源文件

    2. 使用`ClassLoader.getResource()`和`ClassLoader.getResourceAsStream()` - 类加载器(`ClassLoader`)也可以用来获取资源,这对于不是从特定类而是从全局类路径中获取资源很有用。例如: ```java ClassLoader...

    Java-recourse.rar_java读取recouse

    String content = IOUtils.toString(YourClass.class.getResourceAsStream("/resource.txt"), StandardCharsets.UTF_8); ``` 5. **Spring Framework**:在Spring框架中,可以使用`Resource`接口来操作资源,例如...

    jwwe学习资料,jwwe学习资料

    InputStream in = JProperties.class.getClassLoader().getResourceAsStream(name); Properties p = new Properties(); p.load(in); ``` ### 6. 使用`java.lang.ClassLoader.getSystemResourceAsStream()` 这是一...

    Java读取Properties文件的六种方法.txt

    - **`ClassLoader`和`Class.getResourceAsStream()`**:适用于类路径下的资源文件。 - **`URL`**:适用于网络资源文件。 - **`Files.newBufferedReader()`**:适用于Java 7及以上版本,代码更简洁。 - **`...

    ClassLoader

    #### 与反射的区别 虽然该实例看起来与反射机制类似,但二者在实现细节上有所不同: - **反射机制**通常涉及使用`Class.forName()`方法或`Constructor.newInstance()`方法来创建对象。 - **自定义类加载器**则是通过...

    Java加载properties文件的六种方法

    5. **使用 `class.getClassLoader()` 所得到的 `java.lang.ClassLoader` 的 `getResourceAsStream()` 方法** 这种方法与第4种类似,只是通过类加载器获取资源输入流。示例: ```java InputStream in = ...

    使用J2SE API读取Properties文件的六种方法

    当Properties文件与类路径相关联时,可以使用类的`getResourceAsStream()`方法。例如: ```java String name = "config.properties"; InputStream in = JProperties.class.getResourceAsStream(name); ...

    API读取Properties文件的六种方法

    这种方法类似于`Class.getResourceAsStream()`,不同之处在于它通过类加载器来查找资源,这使得它在某些情况下更加灵活。 ```java import java.io.InputStream; import java.util.Properties; public class ...

    读取Properties文件的六种方法

    try (InputStream in = ClassLoaderResourceExample.class.getClassLoader().getResourceAsStream(fileName)) { props.load(in); System.out.println("Read properties from class loader: " + props); } catch ...

    Java读取Properties文件的六种方法

    InputStream input = YourClass.class.getResourceAsStream("/config.properties"); Properties prop = new Properties(); prop.load(input); ``` 3. 使用`java.nio.file`包 Java 7引入了NIO.2 API,我们可以使用`...

    详解Java项目中读取properties文件

    首先,最常用的读取properties文件的方法是利用`java.lang.Class`类的`getResourceAsStream(String name)`方法。例如: ```java InputStream in = getClass().getResourceAsStream("资源Name"); ``` 这种方法的...

    java读取proterties的六种方法

    InputStream in = JProperties.class.getClassLoader().getResourceAsStream("filename.properties"); Properties p = new Properties(); p.load(in); ``` 6. **使用 `ClassLoader` 类的 `...

    使用J2SEAPI读取Properties文件的六种方法

    InputStream is = MyClass.class.getResourceAsStream("/config.properties"); try { prop.load(is); } finally { is.close(); } ``` 这里`MyClass`代表当前类,也可以替换为其他类,资源文件路径通常以斜杠...

    Java读取Properties文件几种方法总结

    使用class.getClassLoader()所得到的java.lang.ClassLoader的getResourceAsStream()方法也可以读取Properties文件。下面是一个示例代码: ```java InputStream in = JProperties.class.getClassLoader()....

    Jar包中如何正确地加载资源文件博文中用到的测试项目源码

    你可以通过`Thread.currentThread().getContextClassLoader()`或`Class.getResourceAsStream()`来获取`ClassLoader`实例,然后使用`getResourceAsStream()`方法加载资源文件。例如: ```java InputStream in = ...

    Java程序中的配置文件的存放和读取[文].pdf

    ClassLoader loader = ConnectionPool.class.getClassLoader(); String packageName = ConnectionPool.class.getPackage().getName().replace('.', '/'); String path = packageName + "/database.properties"; ...

    附带资源的jar包

    当需要在运行时动态加载资源时,还可以使用`ClassLoader.getResource()`或`ClassLoader.getResourceAsStream()`,这样可以利用当前线程的上下文类加载器,适应更复杂的类加载环境。 在打包过程中,确保资源被正确...

Global site tag (gtag.js) - Google Analytics