不需解压修改jar包文件内容

yzmm
796 阅读
修改jar内容,一般做法是先解压再修改最好再压缩成jar。看了下api发现可以直接通过修改InputStream内容去修改jar。

代码:

/**
	 * 修改jar包内容
	 * @param jarPath
	 * @param path
	 * @throws Exception 
	 */
	public static void makeJar(String jarPath,String path) throws Exception {
		try {
			JarOutputStream jos = new JarOutputStream(new FileOutputStream(path));
			File jarFile = new File(jarPath);
			JarFile jf = new JarFile(jarFile);
			Enumeration<JarEntry> je = jf.entries();
			while (je.hasMoreElements()) {
				JarEntry jar = je.nextElement();
				System.out.println(jar.getName());
				ZipEntry z = new ZipEntry(jar.getName());
				InputStream in = jf.getInputStream(jar);
				jos.putNextEntry(z);
				//修改config.properties文件中的host位hehe
				if("config.properties".equals(jar.getName())){
					jos.write(IOUtils.toString(in,"UTF-8").replace("host", "hehe").getBytes("UTF-8"));
				}else{
					jos.write(IOUtils.toByteArray(in));
				}
				jos.closeEntry();
			}
			jos.close();
			jf.close();
		} catch (Exception e) {
			throw e;
		}
	}
	public static void main(String[] args) {
		try {
			makeJar("/Users/yz/fat.jar","/Users/yz/1.jar");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

反编译修改后的jar发现原来的jar包当中的config.properties已经修改成功了。

评论 (2)

王路
jos.write(IOUtils.toString(in,"UTF-8").replace("host", "hehe").getBytes("UTF-8")); <p>这个可以放多个配置进行替换吗,大神?</p>
yzmm
你可以修改这段替换代码,做成配置文件也挺简单的吧。

发表评论