Java 读取类路径下的资源文件实现代码

 更新时间:2017年07月26日 16:53:22   投稿:lqh  
这篇文章主要介绍了Java 读取类路径下的资源文件实现代码的相关资料,主要实现工具类代码ResourceLoadUtil.java的实例需要的朋友可以参考下

Java 读取类路径下的资源文件实现代码

一、工具类代码ResourceLoadUtil.java

import java.io.IOException; 
import java.io.InputStream; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.Enumeration; 
import java.util.List; 
 
public class ResourceLoadUtil { 
 
  /** 
   * @param args 
   */ 
  public static void main(String[] args) { 
    System.out.println("ByClazz...\n--------------------------"); 
    System.out.println(loadResourceByClazz(String.class, "/java/lang/String.class")); 
    System.out.println(loadResourceByClazz(String.class, "/ResourceLoadUtil.class")); 
    System.out.println(); 
 
    System.out.println("ByClasLoader...\n--------------------------"); 
    System.out.println(loadResourceByClassLoader("java/lang/String.class")); 
    System.out.println(loadResourceByClassLoader("ResourceLoadUtil.class")); 
    System.out.println(); 
 
    System.out.println("sByClasLoader...\n--------------------------"); 
    System.out.println(loadResourcesByClassLoader("java/lang/String.class")); 
    System.out.println(loadResourcesByClassLoader("ResourceLoadUtil.class")); 
    System.out.println(loadResourcesByClassLoader("struts-plugin.xml")); 
 
  } 
 
  /** 
   * 根据Class加载资源文件 
   * 
   * @param clazz 
   * @param path 
   *      以'/'开头的路径: 使用绝对路径寻找文件(以ClassPath为根路径开始)<br> 
   *      否则: 使用相对路径寻找文件(相对于clazz位置路径开始) 
   * @return 
   */ 
  public static InputStream loadResourceByClazz(Class<?> clazz, String path) { 
    return clazz.getResourceAsStream(path); 
  } 
 
  /** 
   * 根据ClassLoader加载资源文件(单个), 使用默认的ClassLoader! 
   * 
   * @param path 
   *      不能以'/'开头的路径 
   * @return 
   */ 
  public static InputStream loadResourceByClassLoader(String path) { 
    return loadResourceByClassLoader(null, path); 
  } 
 
  /** 
   * 根据ClassLoader加载资源文件(单个), 使用默认的ClassLoader! 
   * 
   * @param path 
   *      不能以'/'开头的路径 
   * @return 
   */ 
  public static InputStream loadResourceByClassLoader(ClassLoader cl, String path) { 
    if (cl == null) { 
      cl = Thread.currentThread().getContextClassLoader(); 
    } 
    return cl.getResourceAsStream(path); 
  } 
 
  /** 
   * 根据ClassLoader加载资源文件(多个),使用默认的ClassLoader! 
   * 
   * @param path 
   *      不能以'/'开头的路径 
   * @return 
   */ 
  public static List<URL> loadResourcesByClassLoader(String path) { 
    return loadResourcesByClassLoader(null, path); 
  } 
 
  /** 
   * 根据ClassLoader加载资源文件(多个),使用指定的ClassLoader! 
   * 
   * @param path 
   *      不能以'/'开头的路径 
   * @return 
   */ 
  public static List<URL> loadResourcesByClassLoader(ClassLoader cl, String path) { 
    if (cl == null) { 
      cl = Thread.currentThread().getContextClassLoader(); 
    } 
    List<URL> urlLst = new ArrayList<URL>(); 
    try { 
      Enumeration<URL> urlsEnum = cl.getResources(path); 
      while (urlsEnum.hasMoreElements()) { 
        URL url = (URL) urlsEnum.nextElement(); 
        urlLst.add(url); 
      } 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
    return urlLst; 
  } 
} 
 
 
 

二、执行结果

ByClazz... 
-------------------------- 
sun.net.www.protocol.jar.JarURLConnection$JarURLInputStream@11cfb549 
java.io.BufferedInputStream@a422ede 
 
ByClasLoader... 
-------------------------- 
sun.net.www.protocol.jar.JarURLConnection$JarURLInputStream@7f12f614 
java.io.BufferedInputStream@35d9dc39 
 
sByClasLoader... 
-------------------------- 
[jar:file:/D:/Java/jdk1.6.0_25/jre/lib/rt.jar!/java/lang/String.class] 
[file:/E:/workspace/JBDS/Spring+Struts2-Integration/target/classes/ResourceLoadUtil.class] 
[jar:file:/E:/360data/%e9%87%8d%e8%a6%81%e6%95%b0%e6%8d%ae/.m2/repository/org/apache/struts/struts2-spring-plugin/2.3.4.1/struts2-spring-plugin-2.3.4.1.jar!/struts-plugin.xml, jar:file:/E:/360data/%e9%87%8d%e8%a6%81%e6%95%b0%e6%8d%ae/.m2/repository/org/apache/struts/struts2-config-browser-plugin/2.3.4.1/struts2-config-browser-plugin-2.3.4.1.jar!/struts-plugin.xml] 

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • IntelliJ IDEA 2021.1 EAP 1 发布支持 Java 16 和 WSL 2

    IntelliJ IDEA 2021.1 EAP 1 发布支持 Java 16 和 WSL 2

    这篇文章主要介绍了IntelliJ IDEA 2021.1 EAP 1 发布支持 Java 16 和 WSL 2,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • Java自动生成趋势比对数据的方法分享

    Java自动生成趋势比对数据的方法分享

    这篇文章主要和大家分享了一种Java自动生成趋势比对数据的方法设计及实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-04-04
  • Java服务cpu100%的解决过程分享

    Java服务cpu100%的解决过程分享

    最近一个任务是优化一个导出的功能,但是点击功能时发现,程序长时间无反应,过一段时间又有反应,通过查看服务的监控发现,服务存在cpu持续100%的情况,下面分享一下我的处理方案和过程,需要的朋友可以参考下
    2024-05-05
  • 基于SpringBoot实现自定义插件的流程详解

    基于SpringBoot实现自定义插件的流程详解

    在SpringBoot中,插件是一种扩展机制,它可以帮助我们在应用程序中快速地添加一些额外的功能,在本文中,我们将介绍如何使用 SpringBoot实现自定义插件,需要的朋友可以参考下
    2023-06-06
  • 基于java.lang.IllegalArgumentException异常报错问题及解决

    基于java.lang.IllegalArgumentException异常报错问题及解决

    这篇文章主要介绍了基于java.lang.IllegalArgumentException异常报错问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • Java synchronized关键字使用方式及特性解析

    Java synchronized关键字使用方式及特性解析

    这篇文章主要介绍了Java synchronized关键字使用方式及特性解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • SpringMVC的执行流程及组件详解

    SpringMVC的执行流程及组件详解

    这篇文章主要介绍了SpringMVC的执行流程及组件详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Java项目之java+springboot+ssm实现理财管理系统设计

    Java项目之java+springboot+ssm实现理财管理系统设计

    这篇文章主要介绍了Java项目java+springboot+ssm实现理财管理系统设计,使用了当前较为流行的spring boot,spring,spring mvc,mybatis,shiro框架分页处理使用了pagehelper进行操作,需要的朋友可以参考一下
    2022-03-03
  • 超详细讲解Java异常

    超详细讲解Java异常

    Java 异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。本文超详细讲解了Java异常,感兴趣的小伙伴可以参考一下这篇文章
    2021-09-09
  • JUC循环屏障CyclicBarrier与CountDownLatch区别详解

    JUC循环屏障CyclicBarrier与CountDownLatch区别详解

    这篇文章主要为大家介绍了JUC循环屏障CyclicBarrier与CountDownLatch区别详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12

最新评论