一、共同点:
两个都可以用于从 classpath 里面进行资源读取。
二、不同点:资源的定义不同
1、Class用于相对于一个Object取资源。
2、ClassLoader相对于classpath取资源,用的是绝对路径。
3、路径的不同:
3.1:在使用Class.getResourceAsStream 时, 资源路径有两种方式,
一种以 / 开头,则这样的路径是指定绝对路径,
一种不以 / 开头, 则路径是相对与这个class所在的包的。
3.2:在使用ClassLoader.getResourceAsStream时, 路径直接使用相对于classpath的绝对路径。
三、实例说明:Tools.class.getClassLoader().getResourceAsStream(file);
首先,Tools.class是获得对象当前的类类型,这部分数据存在方法区中,
然后,在类类型上调用getClassLoader()方法是得到当前类型的类加载器,在Java中所有的类都是通过加载器加载到虚拟机中的,而且类加载器之间存在父子关系,就是子知道父,父不知道子,这样不同的子加载的类型之间是无法访问的(虽然它们都被放在方法区中),这样通过当前类的加载器来加载资源也就是保证是和类类型同一个加载器加载的。
最后,调用了类加载器的getResourceAsStream()方法来加载文件资源。
相关推荐
4. **使用`defineClass`方法定义类**:当输入流不为空时,使用`ClassLoader`的`defineClass`方法将字节数组转换为`Class`对象。 5. **实例化类**:通过`myLoader.loadClass(...
在 Java 中,有两种方式可以获取文件路径,即使用 Class.getResourceAsStream() 和 ClassLoader.getResourceAsStream()。 Class.getResourceAsStream() Class.getResourceAsStream() 方法返回的是一个 InputStream...
类加载器(`ClassLoader`)负责将编译后的`.class`文件加载到Java虚拟机(JVM)中执行,而类路径(`ClassPath`)则是指明了这些`.class`文件的位置。本文主要围绕Java类加载器和类路径展开讨论,以加深对Java运行时...
`ClassLoader`是Java用来加载类和资源的对象,它能够遍历整个`Classpath`来寻找指定的资源。由于`getClassLoader().getResourceAsStream()`是从类路径的根开始查找,所以也不需要在`fileName`前添加斜杠。 当你的...
`WebappClassLoader`实现了`getResource`和`getResourceAsStream`方法,以便于获取Web应用中的资源。 4. **同步机制**:为了保证并发环境下的安全,`WebappClassLoader`使用锁机制来控制对类加载的访问,避免了多...
- 当使用`Class.getResource`或`Class.getResourceAsStream`时,如果路径不以 `/` 开头,那么查找将从调用该方法的类所在的包开始。 - 当使用`ClassLoader.getResource`或`ClassLoader.getResourceAsStream`时,路径...
2. **使用ClassLoader资源流**:通过`ClassLoader.getResource()`或`getResourceAsStream()`获取类路径上的资源,这种方法适用于JAR文件或被打包的Class文件。 3. **Java SPI服务发现**:通过`java.util....
1. 使用`Class.getResource()`和`Class.getResourceAsStream()` - `Class.getResource(String path)`方法返回一个`URL`对象,表示相对于当前类的类路径上的资源的位置。例如,如果你有一个名为`config.properties`...
从Java JAR文件包中读取资源是Java...通过合理利用`getResource`和`getResourceAsStream`等方法,结合正确的资源路径和类加载器,可以高效地实现这一目标。理解这些概念对于构建可移植且健壮的Java应用程序至关重要。
3. Class.getResource() 和 ClassLoader.getResource() 的区别 在读取资源文件时,经常使用 Class.getResource() 或 ClassLoader.getResource() 方法。两种方法都可以读取资源文件,但是它们的使用场景和返回值不同...
String content = IOUtils.toString(YourClass.class.getResourceAsStream("/resource.txt"), StandardCharsets.UTF_8); ``` 5. **Spring Framework**:在Spring框架中,可以使用`Resource`接口来操作资源,例如...
InputStream is = classLoader.getResourceAsStream("config.properties"); ``` #### 五、反射的安全性和性能问题 虽然Java反射机制提供了强大的功能,但在使用时也应注意其潜在的问题: - **安全性**: 由于反射...
InputStream in = JProperties.class.getClassLoader().getResourceAsStream(name); Properties p = new Properties(); p.load(in); ``` 这个方法可以处理任何由类加载器加载的资源。 6. **使用java.lang....
2. **getResource() 和 getResourceAsStream()**: 这两个方法是ClassLoader和类的Class对象提供的。`getResource()`返回一个URL,用于定位资源的路径;`getResourceAsStream()`则返回一个InputStream,可以直接读取...
- **`ClassLoader`和`Class.getResourceAsStream()`**:适用于类路径下的资源文件。 - **`URL`**:适用于网络资源文件。 - **`Files.newBufferedReader()`**:适用于Java 7及以上版本,代码更简洁。 - **`...
Java 中获取类资源的方法总结可以通过 ClassLoader 或 Class 对象来实现,两者都可以用来获取类路径下的资源文件,但是它们的搜索路径和方式不同。 在实际开发中,我们需要根据具体情况选择合适的方法来获取类资源...
`ClassLoader`提供了`getResource`和`getResourceAsStream`方法来获取资源的URL或输入流。例如,如果我们有一个名为`res.txt`的文件与`MyClass`同级,可以这样获取其URL: ```java URL resourceUrl = classLoader...
ClassLoader loader = ConnectionPool.class.getClassLoader(); String packageName = ConnectionPool.class.getPackage().getName().replace('.', '/'); String path = packageName + "/database.properties"; ...
自定义类加载器通常需要继承`java.lang.ClassLoader`类,并重写`findClass(String name)`方法。此方法接收类名作为参数,然后找到对应的`.class`文件并将其转换为`Class`对象。以下是一个简单的类加载器示例: ```...
5. **使用 `class.getClassLoader()` 所得到的 `java.lang.ClassLoader` 的 `getResourceAsStream()` 方法** 这种方法与第4种类似,只是通过类加载器获取资源输入流。示例: ```java InputStream in = ...