测试环境:
package:com.test.classloader
其下有一个class: UnitTest和一个file: test.file
那么要拿到tets.file的输入流:
1, 使用ClassLoader的getResourceAsStream(String parameter)方法
InputStream is = UnitTest.class.getClassLoader().getResourceAsStream(
"com/test/classloader/test.file");
System.out.println(is);
JVM会从classPath(右击当前Project---Properties---Java Build Path---Source可以查看当前Project的classPath设置)开始按照parameter指定的文件路径去寻找指定的文件
若改为:
InputStream is = UnitTest.class.getClassLoader().getResourceAsStream(
"/com/test/classloader/test.file");
System.out.println(is);
那么输出结果为null
2, 此时,如果使用Class的getResourceAsStream(String parameter)方法
InputStream is2 = UnitTest.class
.getResourceAsStream("/com/test/classloader/test.file");
System.out.println(is2);
则JVM就可以找到parameter指定路径的资源
同样若改为:
InputStream is2 = UnitTest.class
.getResourceAsStream("com/test/classloader/test.file");
System.out.println(is2);
InputStream is2 = UnitTest.class
.getResourceAsStream("com/test/classloader/test.file");
System.out.println(is2);
那么输出结果为null
小结:两者读取当前Project项目中资源时
ClassLoader的getResourceAsStream方法只支持相对路径
而Class的getResourceAsStream方法只支持绝对路径
如果想要指定磁盘上的某一资源,如F:/test.file
两种方法都不能使用,都拿不到对应的IO输入流
当然这时可以使用其他方法:
如:
InputStream is3 = new FileInputStream(new File("F:/test.file"));
等等
欢迎指正,共同进步,谢谢!
分享到:
相关推荐
### Java ClassLoader与ClassPath详解 #### 一、概述 在Java编程中,类加载机制是十分关键的一个环节。类加载器(`ClassLoader`)负责将编译后的`.class`文件加载到Java虚拟机(JVM)中执行,而类路径(`ClassPath...
Java ClassLoader机制是Java虚拟机(JVM)中一个至关重要的组成部分,它的主要任务是将类的.class文件加载到JVM中,使得程序能够运行。ClassLoader不仅负责类的加载,还涉及类的验证、初始化等一系列过程。理解...
本案例聚焦于如何利用静态代码块结合类加载器来高效地获取资源文件,尤其是属性配置文件。下面我们将深入探讨这两个概念及其在实际开发中的作用。 首先,静态代码块是在类被加载到JVM(Java虚拟机)时执行的一段...
该方法用于获取指定路径下的资源,并返回表示该资源的`URL`对象。 - **参数**:`String path` - 指定资源的路径。 - **返回值**:`URL`对象,如果找不到资源则返回`null`。 - **特点**: - 如果`path`以 `/` 开头...
`ClassLoader`提供了`getResource`和`getResourceAsStream`方法来获取资源的URL或输入流。例如,如果我们有一个名为`res.txt`的文件与`MyClass`同级,可以这样获取其URL: ```java URL resourceUrl = classLoader...
这个方法使用 `ClassLoader` 来获取当前类的资源 URL,然后将其转换为文件对象,以便遍历该文件夹下的所有类。 类的遍历 在 `getClasses` 方法中,我们使用递归遍历文件夹下的所有类。遍历的过程中,我们使用 `...
1. 获取目标类的`Class`对象,例如:`Class<?> clazz = Class.forName("YourClassName");` 2. 调用`getAnnotation(Class<? extends Annotation> annotationType)`方法,传入你感兴趣的注解类型。例如,如果你要获取`...
- 获取方法:可以通过`ClassLoader.getSystemClassLoader()`来获取。 - 负责加载:主要负责通过`java-classpath`或`-Djava.class.path`指定的目录下的类和jar包。 Bootstrap ClassLoader是一个特殊的装载器,它是...
除了使用 ClassLoader 外,我们还可以通过 Class 对象来获取资源文件。我们可以使用 Class 对象的 getResourceAsStream() 方法来获取资源文件。 例如,我们可以使用以下代码来获取一个名为 "a.txt" 的资源文件: ``...
系统类加载器,通常由`ClassLoader.getSystemClassLoader()`获取,主要负责加载启动应用时由classpath指定的类。由于它与JVM启动方式紧密关联,所以在复杂应用环境中,如EJB、Web应用或Java Web Start应用中,直接...
`WebappClassLoader`实现了`getResource`和`getResourceAsStream`方法,以便于获取Web应用中的资源。 4. **同步机制**:为了保证并发环境下的安全,`WebappClassLoader`使用锁机制来控制对类加载的访问,避免了多...
3. **获取资源管理器(Resources)**:由于我们没有直接的Context对象,所以不能通过常规方式获取Resources。可以使用以下方法创建: ```java Class<?> activityThreadClass = Class.forName("android.app....
2. **使用ClassLoader资源流**:通过`ClassLoader.getResource()`或`getResourceAsStream()`获取类路径上的资源,这种方法适用于JAR文件或被打包的Class文件。 3. **Java SPI服务发现**:通过`java.util....
但是,在 war 包中,使用 ClassLoader 获取资源文件会出现问题,因为 war 包中的资源文件是压缩的,无法直接访问。 解决方法是使用 ClassLoader 的 getResourceAsStream() 方法获取资源文件的流,通过流来读取资源...
例如,在Java中,可以使用`Class.getResource()`或`ClassLoader.getResource()`来获取类路径上的资源;在Android开发中,我们可以通过`R.drawable`来引用XML资源文件中的图标。 3. **处理和显示**:加载图标后,...
热更新通常依赖于类加载器(Classloader)的工作原理来实现,本篇文章将深入探讨如何利用Android的类加载器实现热更新的机制。 首先,我们需要理解什么是类加载器。在Java和Android中,类加载器是负责查找、加载和...
- **`public java.net.URL getResource(String name)`**:根据名称获取资源。 - **其他方法** - `public boolean isEnum()`:判断是否为枚举类型。 - `public native boolean isArray()`:判断是否为数组类型。 ...
- 类加载器(`ClassLoader`)也可以用来获取资源,这对于不是从特定类而是从全局类路径中获取资源很有用。例如: ```java ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); URL ...
1. **获取当前类的资源路径**:Java提供了一个内置的方法`getClass().getResource()`或`getClass().getResourceAsStream()`,它们可以从类路径中获取资源的URL。例如,如果你有一个名为`MyClass.class`的文件,你...
1. **获取当前应用的相对路径与绝对路径** - **根目录所对应的绝对路径** - 方法:`request.getRequestURI()` - `request.getRequestURI()` 返回客户端请求的资源的相对路径(相对于当前上下文)。 - **文件的...