package com.sf.module.gui.configcopy.util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Enumeration; import java.util.jar.JarEntry; import java.util.jar.JarFile; import java.util.jar.JarOutputStream; public class JarFileReplaceUtil { /** * * @param jarPath * jar包所在绝对路径 * @param sourcePath * confPath配置文件绝对路径 * @param destPath * 配置文件jar包 位置config/sysconfig.properties * @throws IOException */ public static void replaceFile(String jarPath, String sourcePath, String destPath) throws IOException { String jarName = jarPath.substring(jarPath.lastIndexOf(File.separator), jarPath.lastIndexOf(".")); File file = new File(jarPath); File destFile = new File(jarPath.substring(0, jarPath.lastIndexOf(File.separator)) + jarName + "_cp.jar"); file.renameTo(destFile);// 将jar文件名重命名为jarName_cp.jar JarFile jarFile = null; InputStream in = null; JarOutputStream out = null; try { jarFile = new JarFile(destFile); out = new JarOutputStream(new FileOutputStream(file)); Enumeration<JarEntry> enumeration = jarFile.entries(); while (enumeration.hasMoreElements()) { JarEntry jarEntry = enumeration.nextElement(); InputStream in_ = null; try { String jarEntryName = jarEntry.getName(); System.out.println(jarEntryName); if (destPath.equals(jarEntryName)) { continue; } in_ = jarFile.getInputStream(jarEntry); out.putNextEntry(jarEntry); ConfigCopyUtil.copyFile(in_, out); } finally { if (in_ != null) { try { in_.close(); } catch (IOException e) { } } } } JarEntry jarEntry = new JarEntry(destPath); out.putNextEntry(jarEntry); in = new FileInputStream(new File(sourcePath)); ConfigCopyUtil.copyFile(in, out); } finally { if (in != null) { try { in.close(); } catch (IOException e) { } } if (out != null) { try { out.close(); } catch (IOException e) { } } if (jarFile != null) { try { jarFile.close(); } catch (IOException e) { } } } destFile.delete(); } public static void main(String[] args) { String jarPath = "E:\\com.sf.app.ebar.main_2016.1.13.jar"; String sourcePath = "E:/gui/uat/main.sysconfig.properties"; String destPath = "config/sysconfig.properties"; try { JarFileReplaceUtil.replaceFile(jarPath, sourcePath, destPath); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
public static void copyFile(InputStream in, OutputStream out) throws IOException { int length = 2097152; byte[] buffer = new byte[length]; int len = 0; while ((len = in.read(buffer)) > -1) { out.write(buffer, 0, len); } }
相关推荐
Spring bean 一般通过配置文件和注解进行加载,如果要实现jar或class文件,动态实现spring bean 的动态加载,并通过UrlClassLoader完成jar和class文件的加载。可以实现jar的热替换。spring的bean动态加载则需要对...
实例144 读取jar包文件 215 实例145 文件的加密/解密操作 217 实例146 复制图片 219 实例147 随机读写Java类文件 221 第3篇 Java面向对象编程 第8章 面向对象(教学视频:72分钟) 226 ...
(很大总是不能很好的加载,我想补充一下:把你下载好的JXL.JAR包放入D:\JAVA\jre\lib\ext中(我的是JDK1.6)就OK了。我相信在配置TOMCAT时也需要把相关的三个包放到这里面。) 基本操作 一、创建文件 拟...
jwx是开源的java公众号开发MVC框架,基于spring配置文件和微信消息或事件注解,通过微信上下文处理一个或多个微信公众号服务请求。目的主要有两个,其一生封装微信请求xml消息为java实体对象,将返回对象转换为xml...
实例144 读取jar包文件 215 实例145 文件的加密/解密操作 217 实例146 复制图片 219 实例147 随机读写Java类文件 221 第3篇 Java面向对象编程 第8章 面向对象(教学视频:72分钟) 226 8.1 类 226 实例148 简单的...
实例144 读取jar包文件 215 实例145 文件的加密/解密操作 217 实例146 复制图片 219 实例147 随机读写Java类文件 221 第3篇 Java面向对象编程 第8章 面向对象(教学视频:72分钟) 226 8.1 类 ...
实例144 读取jar包文件 215 实例145 文件的加密/解密操作 217 实例146 复制图片 219 实例147 随机读写Java类文件 221 第3篇 Java面向对象编程 第8章 面向对象(教学视频:72分钟) 226 8.1 类 226 实例148 ...
实例144 读取jar包文件 215 实例145 文件的加密/解密操作 217 实例146 复制图片 219 实例147 随机读写Java类文件 221 第3篇 Java面向对象编程 第8章 面向对象(教学视频:72分钟) 226 8.1 类 226 实例148 简单的...
� 源代码完全开放,便于开发人员更清楚的把握实现细节,便于提高开发人员的技术水平,有利于开发 出 更具差异性的应用。 � 采用了对有限内存、电池和 CPU 优化过的虚拟机 Dalvik , Android 的运行速度比想象的要...
CCB:Visual Basic动态按钮配置文件 CCH:Corel图表文件 CCO:CyberChat数据文件 CCT:Macromedia Director Shockwave投影 CDA:CD音频轨道 CDF:Microsoft频道定义格式文件 CDI:Philip的高密盘交互格式 CDM...