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动态加载则需要对...
- Maven和Gradle等构建工具允许你配置如何打包和处理JAR文件中的资源,比如在构建过程中自动处理资源文件的复制和替换。 通过这些方法,开发者可以方便地访问和操作JAR文件内部的文件内容,无论是简单的文本文件...
Java的JAR(Java Archive)文件是用于封装Java类、资源和配置文件的打包格式,便于分发和执行。在某些情况下,为了保护代码的安全性和防止未经授权的访问或修改,开发者可能需要对JAR包进行加密。本篇将详细介绍Java...
在IT行业中,开发人员经常需要对已编译的.jar文件进行反编译,以便查看其中的源代码。这是因为有时我们可能需要理解别人的代码实现,或者查找某个类或方法的实现细节。Eclipse作为一款强大的Java集成开发环境,提供...
2. API文档学习:理解并熟悉泛微提供的开发文档,了解各个Jar包中的类和方法,以及它们在系统中的作用。 3. 设计与编码:根据实际需求设计业务逻辑,编写Java代码,调用E-cology的API实现功能集成。 4. 测试验证:...
2. **零配置**:通过代码生成配置,减少了XML配置文件的繁琐工作。 3. **插件丰富**:提供了如ActiveRecord、I18N、Upload、Download等大量插件,便于扩展功能。 4. **高性能**:Jfinal采用AOP(面向切面编程)实现...
示例代码通常包括混淆工具的配置文件(如proguard.conf)和加密工具的配置文件(如encryption.cfg),这两个文件中会定义混淆和加密的具体规则,例如保留特定的类或方法不被混淆或加密。 总之,对SpringBoot项目的...
每个`class`文件对应一个类或接口,此外,`jar`文件还可能包含资源文件,如配置文件、图片等。`MANIFEST.MF`文件是`jar`包的清单,记录了有关`jar`文件的基本信息,如版本、作者、主类等。 在项目开发中,遇到需求...
在设置你的开发环境时,确保正确配置了Java环境,并将这些jar文件加入到类路径中。同时,别忘了根据你的浏览器版本更新或替换对应的WebDriver驱动程序。对于数据库交互,你需要确保`mysql-connector-java-5.1.40-bin...
// 在这里调用.jar包中的方法 // 使用QAndroidJniEnvironment和QAndroidJniObject来访问Java世界 QAndroidJniEnvironment envPtr; if (envPtr) { // 示例代码,实际应替换为你的.jar包的类和方法 ...
关闭窗口后,当你在代码中引用到jar包中的类时,Eclipse会自动显示jad反编译的源码。 5. 实时查看:如果你的项目引用了Maven或Gradle,可以配置相应的构建工具,使其在构建过程中自动下载源码。对于Maven,可以在...
- 使用修改后并编译好的`.class`文件替换jar包中的原始`.class`文件。 6. **重新打包jar** - 进入解压后的根目录,打开命令行工具(cmd)。 - 输入以下命令来重新打包jar文件:`jar cvf <jar包名称>.jar <jar包根...
首先,我们看到的“jar包改造过程.v1.0.20180517.docx”文档,这很可能是改造步骤的详细指南,包含了如何修改源代码、配置文件等关键信息。改造jar包通常涉及到以下几个步骤: 1. **分析需求**:明确改造的目的,...
补丁文件可以包含源代码、资源文件、配置文件等,以便于快速应用到现有的软件安装上。 二、Java中的文件操作 在Java中,处理文件和目录的主要工具是`java.io`和`java.nio`包中的类。例如,`File`类用于表示文件和...
JAR文件可以包含资源文件(如图片、配置文件等),并且支持压缩,从而减小文件大小。此外,JAR文件还可以用作Java应用程序的执行入口,通过在命令行上使用`java -jar`命令来运行。 **2. 覆盖到指定目录** 标签...
当其他程序需要这个服务的时候,就可以通过查找这个 jar 包中的配置文件,配置文件中有接口的具体实现类名,可以根据这个类名进行加载实例化,就可以使用该服务了。 SPI 机制的简单示例可以是搜索接口,搜索的实现...
1. MyBatis核心库:MyBatis的主要功能都封装在这个jar包中,包括SQL映射文件解析、SQL执行、结果映射等。它使得开发者可以避免使用JDBC中的大量样板代码,通过XML或注解方式定义SQL语句,提高了开发效率和代码的...
3. **类加载机制**:Java虚拟机(JVM)通过类加载器来加载jar包中的类。这包括启动类加载器、扩展类加载器和应用程序类加载器,它们按照层次结构加载类。开发者可以通过自定义类加载器来处理特定的加载需求。 4. **...
解决冲突的方法是删除或替换冲突的文件,确保CAS客户端jar包中的类库能正常工作。有时,你可能需要根据项目的具体需求来决定保留哪个版本的库,或者寻找可以同时兼容的更新版本。 在实际操作中,配置CAS客户端通常...
这个jar包中包含的驱动程序允许Java开发者使用Java API与MongoDB通信。主要功能包括: 1. 连接管理:创建MongoClient实例,连接到MongoDB集群或单个服务器。 2. 数据库操作:选择或创建数据库,执行CRUD(创建、...