善忘技术夹 Logo
善忘技术夹
技术文章 · 1592 阅读

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");


     


     }


}