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

发布时间 - 2026-01-11 02:31:32    点击率:

详解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资源  # jar资源文件的读取  # 详解Java无需解压直接读取Zip文件和文件内容  # Java如何不解压读取.zip的文件内容  # 从Java的jar文件中读取数据的方法  # Java实现从jar包中读取指定文件的方法  # java实现读取jar包中配置文件的几种方式  # java读取zip/jar包中文件的几种方式  # 加载  # 如有  # 希望能  # 谢谢大家  # 源代码  # 疑问请  # public  # throws  # args  # param  # IOUtils  # org  # JarFile  # commons  # apache  # static  # xml  # plugin  # ClassPath  # System 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】  在centOS 7安装mysql 5.7的详细教程  香港服务器建站指南:免备案优势与SEO优化技巧全解析  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  JavaScript如何实现音频处理_Web Audio API如何工作?  大连网站制作公司哪家好一点,大连买房网站哪个好?  JavaScript实现Fly Bird小游戏  如何在搬瓦工VPS快速搭建网站?  Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框  大学网站设计制作软件有哪些,如何将网站制作成自己app?  如何用搬瓦工VPS快速搭建个人网站?  Laravel Debugbar怎么安装_Laravel调试工具栏配置指南  如何安全更换建站之星模板并保留数据?  中山网站推广排名,中山信息港登录入口?  在Oracle关闭情况下如何修改spfile的参数  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  Python并发异常传播_错误处理解析【教程】  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  在线制作视频网站免费,都有哪些好的动漫网站?  Android GridView 滑动条设置一直显示状态(推荐)  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  专业商城网站制作公司有哪些,pi商城官网是哪个?  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  如何在七牛云存储上搭建网站并设置自定义域名?  Python正则表达式进阶教程_复杂匹配与分组替换解析  如何快速完成中国万网建站详细流程?  如何在阿里云购买域名并搭建网站?  Laravel如何配置Horizon来管理队列?(安装和使用)  香港服务器网站推广:SEO优化与外贸独立站搭建策略  如何批量查询域名的建站时间记录?  javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】  如何在IIS中新建站点并配置端口与IP地址?  使用C语言编写圣诞表白程序  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  如何用y主机助手快速搭建网站?  php 三元运算符实例详细介绍  怎么用AI帮你设计一套个性化的手机App图标?  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  如何快速上传自定义模板至建站之星?  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  LinuxCD持续部署教程_自动发布与回滚机制  Android自定义listview布局实现上拉加载下拉刷新功能  laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法  企业网站制作这些问题要关注  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)