`

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动态加载则需要对...

    jar 包 内文件读取 文件内容

    - Maven和Gradle等构建工具允许你配置如何打包和处理JAR文件中的资源,比如在构建过程中自动处理资源文件的复制和替换。 通过这些方法,开发者可以方便地访问和操作JAR文件内部的文件内容,无论是简单的文本文件...

    java jar包加密.zip

    Java的JAR(Java Archive)文件是用于封装Java类、资源和配置文件的打包格式,便于分发和执行。在某些情况下,为了保护代码的安全性和防止未经授权的访问或修改,开发者可能需要对JAR包进行加密。本篇将详细介绍Java...

    eclipse查看jar包class文件源码插件,jar包反编译查看工具

    在IT行业中,开发人员经常需要对已编译的.jar文件进行反编译,以便查看其中的源代码。这是因为有时我们可能需要理解别人的代码实现,或者查找某个类或方法的实现细节。Eclipse作为一款强大的Java集成开发环境,提供...

    泛微E-cology 二次开发Java Jar包

    2. API文档学习:理解并熟悉泛微提供的开发文档,了解各个Jar包中的类和方法,以及它们在系统中的作用。 3. 设计与编码:根据实际需求设计业务逻辑,编写Java代码,调用E-cology的API实现功能集成。 4. 测试验证:...

    Jfinal相关jar包及配置详情

    2. **零配置**:通过代码生成配置,减少了XML配置文件的繁琐工作。 3. **插件丰富**:提供了如ActiveRecord、I18N、Upload、Download等大量插件,便于扩展功能。 4. **高性能**:Jfinal采用AOP(面向切面编程)实现...

    SpringBoot项目Jar包加密防止反编译详细讲解(值得珍藏)

    示例代码通常包括混淆工具的配置文件(如proguard.conf)和加密工具的配置文件(如encryption.cfg),这两个文件中会定义混淆和加密的具体规则,例如保留特定的类或方法不被混淆或加密。 总之,对SpringBoot项目的...

    jar包解析工具

    每个`class`文件对应一个类或接口,此外,`jar`文件还可能包含资源文件,如配置文件、图片等。`MANIFEST.MF`文件是`jar`包的清单,记录了有关`jar`文件的基本信息,如版本、作者、主类等。 在项目开发中,遇到需求...

    Selenium webdriver 需要jar

    在设置你的开发环境时,确保正确配置了Java环境,并将这些jar文件加入到类路径中。同时,别忘了根据你的浏览器版本更新或替换对应的WebDriver驱动程序。对于数据库交互,你需要确保`mysql-connector-java-5.1.40-bin...

    Qt on Android调用Jar包

    // 在这里调用.jar包中的方法 // 使用QAndroidJniEnvironment和QAndroidJniObject来访问Java世界 QAndroidJniEnvironment envPtr; if (envPtr) { // 示例代码,实际应替换为你的.jar包的类和方法 ...

    jad在Eclipse配置查看jar包源码配置步骤

    关闭窗口后,当你在代码中引用到jar包中的类时,Eclipse会自动显示jad反编译的源码。 5. 实时查看:如果你的项目引用了Maven或Gradle,可以配置相应的构建工具,使其在构建过程中自动下载源码。对于Maven,可以在...

    java源码修改教程-本地maven仓库中的三方jar包修改

    - 使用修改后并编译好的`.class`文件替换jar包中的原始`.class`文件。 6. **重新打包jar** - 进入解压后的根目录,打开命令行工具(cmd)。 - 输入以下命令来重新打包jar文件:`jar cvf &lt;jar包名称&gt;.jar &lt;jar包根...

    jar包改造过程.v1.0.20180517.zip

    首先,我们看到的“jar包改造过程.v1.0.20180517.docx”文档,这很可能是改造步骤的详细指南,包含了如何修改源代码、配置文件等关键信息。改造jar包通常涉及到以下几个步骤: 1. **分析需求**:明确改造的目的,...

    java提取补丁文件

    补丁文件可以包含源代码、资源文件、配置文件等,以便于快速应用到现有的软件安装上。 二、Java中的文件操作 在Java中,处理文件和目录的主要工具是`java.io`和`java.nio`包中的类。例如,`File`类用于表示文件和...

    里面有两个jar包

    JAR文件可以包含资源文件(如图片、配置文件等),并且支持压缩,从而减小文件大小。此外,JAR文件还可以用作Java应用程序的执行入口,通过在命令行上使用`java -jar`命令来运行。 **2. 覆盖到指定目录** 标签...

    Java 基础(8-8)-Java常用机制 - SPI机制详解.pdf

    当其他程序需要这个服务的时候,就可以通过查找这个 jar 包中的配置文件,配置文件中有接口的具体实现类名,可以根据这个类名进行加载实例化,就可以使用该服务了。 SPI 机制的简单示例可以是搜索接口,搜索的实现...

    mybatis框架搭建所需jar包

    1. MyBatis核心库:MyBatis的主要功能都封装在这个jar包中,包括SQL映射文件解析、SQL执行、结果映射等。它使得开发者可以避免使用JDBC中的大量样板代码,通过XML或注解方式定义SQL语句,提高了开发效率和代码的...

    直连jar包

    3. **类加载机制**:Java虚拟机(JVM)通过类加载器来加载jar包中的类。这包括启动类加载器、扩展类加载器和应用程序类加载器,它们按照层次结构加载类。开发者可以通过自定义类加载器来处理特定的加载需求。 4. **...

    cas客户端jar包

    解决冲突的方法是删除或替换冲突的文件,确保CAS客户端jar包中的类库能正常工作。有时,你可能需要根据项目的具体需求来决定保留哪个版本的库,或者寻找可以同时兼容的更新版本。 在实际操作中,配置CAS客户端通常...

    mongodb数据库jar包

    这个jar包中包含的驱动程序允许Java开发者使用Java API与MongoDB通信。主要功能包括: 1. 连接管理:创建MongoClient实例,连接到MongoDB集群或单个服务器。 2. 数据库操作:选择或创建数据库,执行CRUD(创建、...

Global site tag (gtag.js) - Google Analytics