java 打包工具类
java 打包工具类, 需要ant.jar这个jar包具体的看程序实现
package com.cthq.crm.util;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
/**
-
Company: 广州正道(集团)有限公司
-
Title: 中国电信集团级CRM系统
-
description:ZIP文件打包
-
@version 1.0
-
@since: Apr 21, 2010 5:43:53 PM
-
@author liwl
*/
public class ZipUtil {
private ZipOutputStream zipOut = null;
private String outZipName ="";
/**
-
获取压缩的文件名称
-
@return
*/
public String getOutZipFileName() {
return outZipName;
}
/**
- 得到WEB-INFO绝对路径
-
@author liwl Apr 22, 2010 3:30:48 PM
-
getClassPath :
-
@return
*/
public static String getClassPath(){
-
String path = new ZipUtil().getClass().getResource("").getPath().split(“classes”)[0];
String aba_path = path.replaceAll(“%20”," ");
return aba_path;
}
/**
* 取文件在项目中的绝对路径
* @author liwl Apr 22, 2010 3:30:20 PM
* getClassPath :
* @param path
* @return
*/
public static String getClassPath(String path){
path = Thread.currentThread().getContextClassLoader().getResource(path).getPath();
String aba_path = path.replaceAll(“%20”," ");
return aba_path;
}
/**
* 把文件夹打包成RAR,ZIP压缩包,ZIP文件保存到系统缓存目录,返回文件目录
* @author liwl Apr 21, 2010 5:41:02 PM
* zipForDir :
* @param inputFileName 打包的文件夹路径
* @return ZIP文件保存到系统缓存目录,返回文件目录
* @throws Exception
*/
public static String zipForDir(String inputFileName) throws Exception {
String zipFileName = getClassPath()+IDGenerator.getUUID()+"excleZip.zip";
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));
out.setEncoding("gbk");
zipForDir(out, new File(inputFileName), "");
out.flush();
out.close();
return zipFileName;
}
/**
* 把文件夹打包成RAR,ZIP压缩包
* @author liwl Apr 21, 2010 5:37:58 PM
* zipForDir :
* @param inputFileName 要打包的文件夹路径
* @param outFileName 打包好的文件路径
* @throws Exception
*/
public static void zipForDir(String inputFileName,String outFileName) throws Exception {
String zipFileName = outFileName; //打包后文件名字要以.ZIP结束
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFileName));
out.setEncoding("gbk");
zipForDir(out, new File(inputFileName), "");
out.flush();
out.close();
}
/**
* 循环写入ZIP文件
* @author liwl Apr 21, 2010 5:43:21 PM
* zipForDir :
* @param out
* @param f
* @param base
* @throws Exception
*/
private static void zipForDir(ZipOutputStream out, File f, String base) throws Exception {
//验证本文件是否是一个目录
if (f.isDirectory()) {
//目录中文件路径名的数组
File[] fl = f.listFiles();
out.putNextEntry(new ZipEntry(base + "/"));
base = base.length() == 0 ? "" : base + "/";
for (int i = 0; i < fl.length; i++) {
zipForDir(out, fl[i], base + fl[i].getName());
}
}else {
out.putNextEntry(new ZipEntry(base));
FileInputStream in = new FileInputStream(f);
int b;
//输出文件
while ( (b = in.read()) != -1 ) {
out.write(b);
}
in.close();
}
}
/start:创建ZIP包文件,循环放文件把JAR包*/
/**
* 创建并返回一个ZIP输出对象
* @author liwl Apr 26, 2010 10:37:24 AM
* creatZipObj :
*/
public void creatZipObj(){
outZipName = getClassPath()+IDGenerator.getUUID()+“excelZip.rar”;
try {
zipOut = new ZipOutputStream(new FileOutputStream(outZipName));
zipOut.setEncoding("GBK");
}catch (IOException e) {
e.printStackTrace();
}
}
/**
* 把文件写到ZIP里面
* @author liwl Apr 26, 2010 10:55:34 AM
* writeZip :
* @param bytes
* @param excelName
*/
public void writeZip(byte[] bytes,String excelName){
try {
zipOut.putNextEntry(new ZipEntry(excelName));
zipOut.write(bytes);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 读出这个ZIP包
* @author liwl Apr 26, 2010 10:55:29 AM
* getZipBytle :
* @return
*/
public byte[] getZipBytle(){
//关闭文件
closeZip();
if(!outZipName.equals("")){
byte[] bytes = getOutZipByteCon(outZipName);
//删除文件零时文件
(new File(outZipName)).delete();
return bytes;
}
return null;
}
/**
* 关闭
* @author liwl Apr 26, 2010 10:56:14 AM
* close :
*/
public void closeZip(){
try {
if(null != zipOut){
zipOut.flush();
zipOut.close();
zipOut = null;
}
} catch (IOException e) {
e.printStackTrace();
}
}
/end/
/**
*
* @author liwl Apr 22, 2010 10:11:44 AM
* zipForListByte :
* @param list (Map)KEY文件名,VALUE文件BYTE[]
* @param outFileName 生成ZIP包的名字
* @return
*/
/**
* 对多个EXCEL文件打包
* @author liwl Apr 27, 2010 1:15:48 PM
* zipForListByte :
* @param list (Map)KEY文件名,VALUE文件(BYTE[] OR 路径)
* @return ZIP文件包,byte[]
*/
public static byte[] zipForListByte(List list){
String outFileName = getClassPath()+IDGenerator.getUUID()+“my.zip”;
ZipOutputStream out = null;
int i = 1;
try {
out = new ZipOutputStream(new FileOutputStream(outFileName));
out.setEncoding(“GBK”);
Iterator iter = list.iterator();
while(iter.hasNext()){
Map map = (Map)iter.next();
byte[] bytes = null;
if(null!=map){
Object obj = map.get(“excelByte”);
if(obj instanceof String){
bytes = getOutZipByteCon(map.get(“excelByte”).toString());
//删除文件
delFile(map.get(“excelByte”).toString());
}
if(obj instanceof byte[]){
bytes = (byte[]) map.get(“excelByte”);
}
String excelName = (String)map.get(“excelName”);
//设置文件名称
out.putNextEntry(new ZipEntry(i+excelName));
out.write(bytes);
i++;
}
}
} catch (IOException e) {
e.printStackTrace();
}finally{
//关闭流
try {
out.flush();
out.close();
out = null;
} catch (IOException e1) {
e1.printStackTrace();
}
}
//输出文件
byte[] bytes = getOutZipByteCon(outFileName);
//删除文件
delFile(outFileName);
return bytes;
}
/**
* 删除文件
* @author liwl Apr 27, 2010 1:14:44 PM
* delFile :
* @param fileName
*/
public static void delFile(String fileName){
//删除文件
File file = new File(fileName);
if (file.exists() && file.isFile()) {
file.delete();
}
}
/**
-
获取excel数据的二进制数组
-
@author liwl Apr 22, 2010 3:30:01 PM
-
getOutZipByteCon :
-
@param excelFile
-
@return
*/
public static byte[] getOutZipByteCon(String excelFile){
byte[] attachBytes = null;
File file = new File(excelFile);
try {
FileInputStream inputStream = new FileInputStream(file);
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
int cb = 0;
while ((cb = inputStream.read()) != -1) {
outStream.write(cb);
}
inputStream.close();
attachBytes = outStream.toByteArray();
outStream.close();
return attachBytes;
} catch (Exception e) {
}
return null;
}
public static void main(String [] temp){
//
ZipUtil dd = new ZipUtil();
//
List list = new ArrayList();
//
Map map = new HashMap();
// map.put(“excelName”, “在在.xls”);
//
map.put(“excelByte”, dd.getOutZipByteCon(“D:\33.xls”));
// list.add(map);
// try {
//
dd.zipForListByte(list, “d:\test111.rar”);//你要压缩的文件夹
//
dd.zipForDir(“D:\logs”);
// }catch (Exception ex) {
// ex.printStackTrace();
// }
//System.out.println(ZipUtil.getClassPath());
// System.out.println(Thread.currentThread().getContextClassLoader().getResource(ZipUtil.class.getName()).getPath());
System.out.println(getClassPath()+DateUtils.getDateByNowYYMMDDTT()+“excleZip.zip”);
}
}