`

java代码实现对jar包中的配置文件替换

阅读更多
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包热替换

    Spring bean 一般通过配置文件和注解进行加载,如果要实现jar或class文件,动态实现spring bean 的动态加载,并通过UrlClassLoader完成jar和class文件的加载。可以实现jar的热替换。spring的bean动态加载则需要对...

    java范例开发大全源代码

     实例144 读取jar包文件 215  实例145 文件的加密/解密操作 217  实例146 复制图片 219  实例147 随机读写Java类文件 221  第3篇 Java面向对象编程  第8章 面向对象(教学视频:72分钟) 226  ...

    Excel数据操纵-jar包-jxl.jar

     (很大总是不能很好的加载,我想补充一下:把你下载好的JXL.JAR包放入D:\JAVA\jre\lib\ext中(我的是JDK1.6)就OK了。我相信在配置TOMCAT时也需要把相关的三个包放到这里面。)  基本操作  一、创建文件  拟...

    java微信公众号MVC开发框架

    jwx是开源的java公众号开发MVC框架,基于spring配置文件和微信消息或事件注解,通过微信上下文处理一个或多个微信公众号服务请求。目的主要有两个,其一生封装微信请求xml消息为java实体对象,将返回对象转换为xml...

    java范例开发大全

    实例144 读取jar包文件 215 实例145 文件的加密/解密操作 217 实例146 复制图片 219 实例147 随机读写Java类文件 221 第3篇 Java面向对象编程 第8章 面向对象(教学视频:72分钟) 226 8.1 类 226 实例148 简单的...

    Java范例开发大全 (源程序)

     实例144 读取jar包文件 215  实例145 文件的加密/解密操作 217  实例146 复制图片 219  实例147 随机读写Java类文件 221  第3篇 Java面向对象编程  第8章 面向对象(教学视频:72分钟) 226  8.1 类 ...

    Java范例开发大全(全书源程序)

    实例144 读取jar包文件 215 实例145 文件的加密/解密操作 217 实例146 复制图片 219 实例147 随机读写Java类文件 221 第3篇 Java面向对象编程 第8章 面向对象(教学视频:72分钟) 226 8.1 类 226 实例148 ...

    java范例开发大全(pdf&源码)

    实例144 读取jar包文件 215 实例145 文件的加密/解密操作 217 实例146 复制图片 219 实例147 随机读写Java类文件 221 第3篇 Java面向对象编程 第8章 面向对象(教学视频:72分钟) 226 8.1 类 226 实例148 简单的...

    新版Android开发教程.rar

    � 源代码完全开放,便于开发人员更清楚的把握实现细节,便于提高开发人员的技术水平,有利于开发 出 更具差异性的应用。 � 采用了对有限内存、电池和 CPU 优化过的虚拟机 Dalvik , Android 的运行速度比想象的要...

    网管教程 从入门到精通软件篇.txt

    CCB:Visual Basic动态按钮配置文件 CCH:Corel图表文件 CCO:CyberChat数据文件 CCT:Macromedia Director Shockwave投影 CDA:CD音频轨道 CDF:Microsoft频道定义格式文件 CDI:Philip的高密盘交互格式 CDM...

Global site tag (gtag.js) - Google Analytics