`
usummer
  • 浏览: 9978 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Class与ClassLoader获取相关资源

阅读更多

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

    java ClassLoader机制及其在OSGi中的应用

    Java ClassLoader机制是Java虚拟机(JVM)中一个至关重要的组成部分,它的主要任务是将类的.class文件加载到JVM中,使得程序能够运行。ClassLoader不仅负责类的加载,还涉及类的验证、初始化等一系列过程。理解...

    java 静态代码块通过类加载器获取资源文件例子

    本案例聚焦于如何利用静态代码块结合类加载器来高效地获取资源文件,尤其是属性配置文件。下面我们将深入探讨这两个概念及其在实际开发中的作用。 首先,静态代码块是在类被加载到JVM(Java虚拟机)时执行的一段...

    java文件路径获取

    该方法用于获取指定路径下的资源,并返回表示该资源的`URL`对象。 - **参数**:`String path` - 指定资源的路径。 - **返回值**:`URL`对象,如果找不到资源则返回`null`。 - **特点**: - 如果`path`以 `/` 开头...

    java类动态获取相对路径

    `ClassLoader`提供了`getResource`和`getResourceAsStream`方法来获取资源的URL或输入流。例如,如果我们有一个名为`res.txt`的文件与`MyClass`同级,可以这样获取其URL: ```java URL resourceUrl = classLoader...

    JAVA读取同一路径下所有类及其方法

    这个方法使用 `ClassLoader` 来获取当前类的资源 URL,然后将其转换为文件对象,以便遍历该文件夹下的所有类。 类的遍历 在 `getClasses` 方法中,我们使用递归遍历文件夹下的所有类。遍历的过程中,我们使用 `...

    Java笔记-通过反射获取注解及Spring中获取某包下的所有class文件

    1. 获取目标类的`Class`对象,例如:`Class<?> clazz = Class.forName("YourClassName");` 2. 调用`getAnnotation(Class<? extends Annotation> annotationType)`方法,传入你感兴趣的注解类型。例如,如果你要获取`...

    ClassLoader in OSGI

    - 获取方法:可以通过`ClassLoader.getSystemClassLoader()`来获取。 - 负责加载:主要负责通过`java-classpath`或`-Djava.class.path`指定的目录下的类和jar包。 Bootstrap ClassLoader是一个特殊的装载器,它是...

    java中获取类资源的方法总结

    除了使用 ClassLoader 外,我们还可以通过 Class 对象来获取资源文件。我们可以使用 Class 对象的 getResourceAsStream() 方法来获取资源文件。 例如,我们可以使用以下代码来获取一个名为 "a.txt" 的资源文件: ``...

    走出ClassLoader误区

    系统类加载器,通常由`ClassLoader.getSystemClassLoader()`获取,主要负责加载启动应用时由classpath指定的类。由于它与JVM启动方式紧密关联,所以在复杂应用环境中,如EJB、Web应用或Java Web Start应用中,直接...

    Tomcat 5.0.18 ClassLoader source code insight

    `WebappClassLoader`实现了`getResource`和`getResourceAsStream`方法,以便于获取Web应用中的资源。 4. **同步机制**:为了保证并发环境下的安全,`WebappClassLoader`使用锁机制来控制对类加载的访问,避免了多...

    读取外置apk图片.zip

    3. **获取资源管理器(Resources)**:由于我们没有直接的Context对象,所以不能通过常规方式获取Resources。可以使用以下方法创建: ```java Class<?> activityThreadClass = Class.forName("android.app....

    扫描Class文件的方法

    2. **使用ClassLoader资源流**:通过`ClassLoader.getResource()`或`getResourceAsStream()`获取类路径上的资源,这种方法适用于JAR文件或被打包的Class文件。 3. **Java SPI服务发现**:通过`java.util....

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

    但是,在 war 包中,使用 ClassLoader 获取资源文件会出现问题,因为 war 包中的资源文件是压缩的,无法直接访问。 解决方法是使用 ClassLoader 的 getResourceAsStream() 方法获取资源文件的流,通过流来读取资源...

    从模块中获取图标的资源

    例如,在Java中,可以使用`Class.getResource()`或`ClassLoader.getResource()`来获取类路径上的资源;在Android开发中,我们可以通过`R.drawable`来引用XML资源文件中的图标。 3. **处理和显示**:加载图标后,...

    Android 使用classloader原理进行热更新

    热更新通常依赖于类加载器(Classloader)的工作原理来实现,本篇文章将深入探讨如何利用Android的类加载器实现热更新的机制。 首先,我们需要理解什么是类加载器。在Java和Android中,类加载器是负责查找、加载和...

    java中的Class类和反射.docx

    - **`public java.net.URL getResource(String name)`**:根据名称获取资源。 - **其他方法** - `public boolean isEnum()`:判断是否为枚举类型。 - `public native boolean isArray()`:判断是否为数组类型。 ...

    Java 读取资源文件

    - 类加载器(`ClassLoader`)也可以用来获取资源,这对于不是从特定类而是从全局类路径中获取资源很有用。例如: ```java ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); URL ...

    普通java类获取绝对路径

    1. **获取当前类的资源路径**:Java提供了一个内置的方法`getClass().getResource()`或`getClass().getResourceAsStream()`,它们可以从类路径中获取资源的URL。例如,如果你有一个名为`MyClass.class`的文件,你...

    JAVA获取各种路径总结

    1. **获取当前应用的相对路径与绝对路径** - **根目录所对应的绝对路径** - 方法:`request.getRequestURI()` - `request.getRequestURI()` 返回客户端请求的资源的相对路径(相对于当前上下文)。 - **文件的...

Global site tag (gtag.js) - Google Analytics