美文网首页互联网科技java新手学习Java
详解Java读取Jar中资源文件及示例代码

详解Java读取Jar中资源文件及示例代码

作者: Python编程社区 | 来源:发表于2019-05-17 15:04 被阅读4次

    这篇文章主要介绍了详解Java读取Jar中资源文件及实现代码的相关资料,在开发java项目的时候,经常会用到jar包,这里就说下如何读取,需要的朋友可以参考下
    详解Java读取Jar中资源文件及实现代码

           直接上代码,文章的注释部分说的比较清楚,大家可以参考下,
    

    工具类源代码: ResourceLoadFromJarUtil.java

    实现代码:

    import java.io.IOException; 
    import java.io.InputStream; 
    import java.net.JarURLConnection; 
    import java.net.MalformedURLException; 
    import java.net.URL; 
    import java.util.jar.JarEntry; 
    import java.util.jar.JarFile; 
      
    import org.apache.commons.io.IOUtils; 
      
    public class ResourceLoadFromJarUtil { 
      
     /** 
      * @param args 
      * @throws IOException 
      */
     public static void main(String[] args) throws IOException { 
      
      /* 资源文件路径,不能以'/'字符字符开头 */ 
      String resourcePath = "struts-plugin.xml"; 
      
      /* 获取ClassPath下的所有jar路径 */ 
      String[] cps = System.getProperty("java.class.path").split(";"); 
      
      /* 读取本地Jar文件 */ 
      for (String cp : cps) { 
       if (!cp.endsWith(".jar")) { 
        continue; 
       } 
       InputStream in = loadResourceFromJarFile(cp, resourcePath); 
       if (in != null) { 
        System.err.println(IOUtils.toString(in)); 
        in.close(); 
       } 
      } 
      
      /* 读取本地Jar文件 */ 
      for (String cp : cps) { 
       if (!cp.endsWith(".jar")) { 
        continue; 
       } 
       InputStream in = loadResourceFromJarURL(cp, resourcePath); 
       if (in != null) { 
        System.err.println(IOUtils.toString(in)); 
        in.close(); 
       } 
      } 
      
      /* 读取网络Jar文件 */ 
      InputStream in = loadResourceFromJarURL( 
        "http://localhost:8080/SpringStruts2Integration/struts2-spring-plugin-2.3.4.1.jar", resourcePath); 
      if (in != null) { 
       System.err.println(IOUtils.toString(in)); 
       in.close(); 
      } 
     } 
      
     /** 
      * 读取Jar文件中的资源 
      * 
      * @param jarPath 
      *   本地jar文件路径 
      * @param resPath 
      *   资源文件所在jar中的路径(不能以'/'字符开头) 
      * @return 如果资源加载失败,返回null 
      */ 
     public static InputStream loadResourceFromJarFile(String jarPath, String resPath) { 
      if (!jarPath.endsWith(".jar")) { 
       return null; 
      } 
      try { 
       JarFile jarFile = new JarFile(jarPath); 
       JarEntry jarEntry = jarFile.getJarEntry(resPath); 
       if (jarEntry == null) { 
        return null; 
       } 
       return jarFile.getInputStream(jarEntry); 
      } catch (IOException e) { 
       e.printStackTrace(); 
       return null; 
      } 
     } 
      
     /** 
      * 读取Jar文件中的资源 
      * 
      * @param jarUrl 
      *   本地jar文件或网络上(ttp://host:port/subpath/jarfile.jar)jar文件路径 
      * @param resPath 
      *   资源文件所在jar中的路径(不能以'/'字符开头) 
      * @return 如果资源加载失败,返回null 
      */
     public static InputStream loadResourceFromJarURL(String jarUrl, String resPath) { 
      if (!jarUrl.endsWith(".jar")) { 
       return null; 
      } 
      URL url = null; 
      if (jarUrl.startsWith("http://")) { 
       try { 
        url = new URL("jar:" + jarUrl + "!/"); 
       } catch (MalformedURLException e) { 
        e.printStackTrace(); 
        return null; 
       } 
      } else { 
       try { 
        url = new URL("jar:file:/" + jarUrl + "!/"); 
       } catch (MalformedURLException e) { 
        e.printStackTrace(); 
        return null; 
       } 
      } 
      try { 
       JarURLConnection jarURLConnection; 
       jarURLConnection = (JarURLConnection) url.openConnection(); 
       JarFile jarFile = jarURLConnection.getJarFile(); 
       JarEntry jarEntry = jarFile.getJarEntry(resPath); 
       if (jarEntry == null) { 
        return null; 
       } 
       return jarFile.getInputStream(jarEntry); 
      } catch (IOException e) { 
       e.printStackTrace(); 
       return null; 
      } 
     } 
    } 
    

    以上就是对java 读取jar资源的实例,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家。

    相关文章

      网友评论

        本文标题:详解Java读取Jar中资源文件及示例代码

        本文链接:https://www.haomeiwen.com/subject/sfkoaqtx.html