/* ================================================================== * Created [2009-4-27 下午11:32:55] by Jon.King * ================================================================== * TSS * ================================================================== * mailTo:jinpujun@hotmail.com * Copyright (c) Jon.King, 2009-2012 * ================================================================== */ package com.jinhe.tss.core.util; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.jar.JarEntry; import java.util.jar.JarFile; import com.jinhe.tss.core.exception.BusinessException; /** * <p> JarFileHelper.java </p> * */ public class JarFileHelper { /** * 从jar文件中拷贝一个指定的文件到classes上一层临时temp目录下 * @param jarFileName * @param entryName */ public static void copyFileFromJar(String jarFileName, String entryName){ String contentPath = Thread.currentThread().getContextClassLoader().getResource("").getFile(); copyFileFromJar(new File(contentPath + "temp/"), jarFileName, entryName); } /** * 从jar文件中拷贝一个指定的文件到指定目录下 * @param dir * @param jarFile * @param entry */ public static void copyFileFromJar(File dir, String jarFileName, String entryName){ String contentPath = Thread.currentThread().getContextClassLoader().getResource("").getFile(); File file = new File(contentPath.substring(0, contentPath.length() - 8) + "lib/" + jarFileName); JarFile jarFile; try { jarFile = new JarFile(file); } catch (IOException e) { throw new BusinessException("读取jar文件时出错!", e); } JarEntry entry = jarFile.getJarEntry(entryName); if(!dir.exists()){ dir.mkdir(); } String fileName = entry.getName(); File newFile = new File(dir.getPath() + "/" + fileName); InputStream in = null; OutputStream out = null; try { newFile.getParentFile().mkdirs(); in = jarFile.getInputStream(entry); out = new FileOutputStream(newFile); int len = 0; byte[] b = new byte[1024]; while ((len = in.read(b)) != -1) { out.write(b, 0, len); out.flush(); } in.close(); } catch (IOException e) { throw new BusinessException("复制jar包中文件时出错!", e); }finally{ try { if(in != null) in.close(); if(out != null) out.close(); if(jarFile != null) jarFile.close(); } catch (IOException e) { throw new BusinessException("关闭jar文件输出时出错!", e); } } } public static void main(String[] args) throws IOException{ JarFileHelper.copyFileFromJar("tss-dynproperty-src.jar", "com/jinhe/tss/component/dynproperty/support/AbstractDynEntity.java"); } }