当前位置: 首页 > news >正文

深圳罗湖区网站建设公司网站推广要点

深圳罗湖区网站建设公司,网站推广要点,网站开发网站设计素材,企业网站开发标准文章目录 原始需求分析实施步骤引入依赖核心编码运行效果 原始需求 有网友提问: 我想在程序中动态地向同一个jar包中添加文件,比如,我的可执行jar包是test.jar,我要在它运行时生成一些xml文件并将这些文件添加到test.jar中,请问如何实现&…

文章目录

  • 原始需求
  • 分析
  • 实施步骤
      • 引入依赖
      • 核心编码
      • 运行效果

原始需求

有网友提问: 我想在程序中动态地向同一个jar包中添加文件,比如,我的可执行jar包是test.jar,我要在它运行时生成一些xml文件并将这些文件添加到test.jar中,请问如何实现?

分析

test.jar在运行过程中是无法改变自身内容的,但是可以创建内容与test.jar一致的test2.jar
问题就转换成了:

  1. 如何复制已有的test.jar重命名为test2.jar
  2. 如何继续向test2.jar添加新的文件

实施步骤

引入依赖

        <dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.12.0</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.5</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-compress</artifactId><version>1.23.0</version></dependency>

核心编码

借助 commons-compress 来操作Jar

    public void test()throws IOException{String src = getClass().getResource("/apache-jstl.jar").getPath();String add1 = getClass().getResource("/servlet-api.jar").getPath();String add2 = getClass().getResource("/log4j2.xml").getPath();String newJar = src.replace(".jar", DateFormatUtils.format(System.currentTimeMillis(), "_HHmmssSSS") + ".jar");log.info("源文件: {}", src);log.info("++新增: {}", add1);log.info("++新增: {}", add2);log.info("新文件: {}", newJar);try (ArchiveOutputStream outputStream = new JarArchiveOutputStream(new FileOutputStream(newJar));JarArchiveInputStream jarInput = new JarArchiveInputStream(new FileInputStream(src))){JarArchiveEntry jarEntry;while ((jarEntry = jarInput.getNextJarEntry()) != null){if (!jarEntry.isDirectory()){outputStream.putArchiveEntry(jarEntry);IOUtils.copy(jarInput, outputStream);}}outputStream.flush();// 追加addFilesFile[] addFiles = {new File(add1), new File(add2)};for (File addFile : addFiles){JarArchiveEntry addEntry = new JarArchiveEntry("add/" + addFile.getName());outputStream.putArchiveEntry(addEntry);try (InputStream entryInputStream = new FileInputStream(addFile)){IOUtils.copy(entryInputStream, outputStream);}}// 追加add/001.txtJarArchiveEntry entry = new JarArchiveEntry("add/001.txt");outputStream.putArchiveEntry(entry);outputStream.write("org.apache.commons.compress.archivers.jar.JarArchiveOutputStream;".getBytes(StandardCharsets.UTF_8));outputStream.closeArchiveEntry();outputStream.finish();}}

使用JDK API实现

public void test2(){try{String src = getClass().getResource("/apache-jstl.jar").getPath();String add1 = getClass().getResource("/servlet-api.jar").getPath();String add2 = getClass().getResource("/log4j2.xml").getPath();String newJar = src.replace(".jar", DateFormatUtils.format(System.currentTimeMillis(), "_HHmmssSSS") + ".jar");log.info("源文件: {}", src);log.info("++新增: {}", add1);log.info("++新增: {}", add2);log.info("新文件: {}", newJar);addFilesToJar(new File(src), newJar, new File(add1), new File(add2));}catch (IOException e){log.error(e.getMessage(), e);}}/*** JDK-API实现-将addFiles添加到srcJar并重命名为newJar* * @param srcJar* @param newJar* @param addFiles* @throws IOException*/private void addFilesToJar(File srcJar, String newJar, File... addFiles)throws IOException{try (JarOutputStream jarOutputStream = new JarOutputStream(new FileOutputStream(newJar)); JarFile jarFile = new JarFile(srcJar)){// 遍历jar文件数据写入新jarEnumeration<JarEntry> entrys = jarFile.entries();while (entrys.hasMoreElements()){JarEntry jarEntry = entrys.nextElement();if (!jarEntry.isDirectory()){jarOutputStream.putNextEntry(jarEntry);try (InputStream entryInputStream = jarFile.getInputStream(jarEntry)){IOUtils.copy(entryInputStream, jarOutputStream);}}}// 追加写入for (File addFile : addFiles){JarEntry jarEntry = new JarEntry("add/" + addFile.getName());jarOutputStream.putNextEntry(jarEntry);try (InputStream entryInputStream = new FileInputStream(addFile)){IOUtils.copy(entryInputStream, jarOutputStream);}}}}

运行效果

原始文件
在这里插入图片描述
运行后:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
大功告成!!!

有任何问题和建议,都可以向我提问讨论,大家一起进步,谢谢!

-over-

http://www.dt0577.cn/news/44056.html

相关文章:

  • 网站嵌套代码如何进行关键词优化工作
  • 微博优惠券网站怎么做衡阳百度推广公司
  • b2b电子商务平台发展趋势广告优化
  • 承德网站建设价格seo排名软件有用吗
  • 鄂州免费设计网站建设新品牌推广策划方案
  • 无备案网站可以做百度推广专业的郑州网站推广
  • 企业网站建设怎么选择空间广东最新消息
  • 电脑在哪网站接做扇子单会计培训机构排名
  • dart语言做的网站谷歌浏览器官网手机版
  • 医疗网站建设哪个好用关键词搜索工具app
  • 公司域名更改 网站怎么做提示google ads
  • 网站登录 退出怎么做属于网络营销的特点是
  • 微网站模板制作长春网站建设平台
  • 平凉市建设厅官方网站网络营销推广方式有哪些
  • wordpress日志在哪个文件排名优化公司哪家靠谱
  • 微信自制小程序怎么做的seo基础入门
  • oa做软件还是网站营销型网站建设题库
  • 做同业业务一般关注哪些网站域名查询站长之家
  • 装修公司网站开发属于免费的网络营销方式
  • 网站建设 做个网上商城要多少钱啊整站seo技术搜索引擎优化
  • 深圳做企业网站公司保定seo推广外包
  • 电子商务网站建设的核心免费seo工具
  • 网站建设竞争对数分析企业类网站有哪些例子
  • 万网网站建设seo优化厂商
  • 如何查看网站备案惠州seo整站优化
  • 网站页面设计与实现网页设计代码
  • 做网站游戏怎么挣钱外贸平台
  • 做的好的茶叶网站好网络市场调研的方法
  • excel做邮箱网站怎么加3www外贸营销型网站建设公司
  • 网站建立免费热搜词工具