生成zip压缩包文件

	/**
     * @desc 将源文件/文件夹生成指定格式的压缩文件,格式zip
     * @param resourePath 源文件/文件夹
     * @param targetPath  目的压缩文件保存路径
     * @return void
     * @throws Exception 
     */
    public void compressedFile(String resourcesPath,String targetPath) throws Exception{
        File resourcesFile = new File(resourcesPath);     //源文件
        File targetFile = new File(targetPath);           //目的
        //如果目的路径不存在,则新建
        if(!targetFile.exists()){     
            targetFile.mkdirs();  
        }
        
        String targetName = resourcesFile.getName()+".zip";   //目的压缩文件名
        FileOutputStream outputStream = new FileOutputStream(targetPath+"\\"+targetName);
        ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(outputStream));
        
        createCompressedFile(out, resourcesFile, "");
        
        out.close();  
    }
    
    /**
     * @desc 生成压缩文件。
     *                  如果是文件夹,则使用递归,进行文件遍历、压缩
     *       如果是文件,直接压缩
     * @param out  输出流
     * @param file  目标文件
     * @return void
     * @throws Exception 
     */
    public void createCompressedFile(ZipOutputStream out,File file,String dir) throws Exception{
        //如果当前的是文件夹,则进行进一步处理
        if(file.isDirectory()){
            //得到文件列表信息
            File[] files = file.listFiles();
            //将文件夹添加到下一级打包目录
            out.putNextEntry(new ZipEntry(dir+"/"));
            
            dir = dir.length() == 0 ? "" : dir +"/";
            
            //循环将文件夹中的文件打包
            for(int i = 0 ; i < files.length ; i++){
                createCompressedFile(out, files[i], dir + files[i].getName());         //递归处理
            }
        }
        else{   
        	// 压缩文件
            byte[] buffer = new byte[4096];
            int bytes_read;
            for(int i=0;i<5;i++){
            	FileInputStream in = new FileInputStream(file);

                ZipEntry entry = new ZipEntry(i+"daf的.xls");
                out.putNextEntry(entry);

                while ((bytes_read = in.read(buffer)) != -1) {
                    out.write(buffer, 0, bytes_read);
                }
            }
            
            out.closeEntry();
        }
    }
    /**
     * 压缩文件生成zip包
     * @param resourcesPathList
     * @param targetPath
     * @param zipName
     * @param namelist
     * @param gslist
     * @throws Exception
     * @author  ZHENWENCAN
     * @date  2017年6月9日 下午3:38:36
     */
    public void compressedFileList(List<String> resourcesPathList,String targetPath,String zipName,List<String> namelist) throws Exception{
        List<File> resourcesFile = new ArrayList<File>();//源文件
        if(resourcesPathList!=null){
        	for(String tmp : resourcesPathList){
        		resourcesFile.add(new File(tmp));
        	}
        }
        File targetFile = new File(targetPath);           //目的
        //如果目的路径不存在,则新建
        if(!targetFile.exists()){     
            targetFile.mkdirs();  
        }
        String targetName = zipName+".zip";   //目的压缩文件名
        FileOutputStream outputStream = new FileOutputStream(targetPath+"\\"+targetName);
        ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(outputStream));
        
        createCompressedFileList(out, resourcesFile,namelist);
        
        out.close();  
    }
    /**
     * 压缩文件
     * @param out
     * @param filelist
     * @param namelist
     * @param gslist
     * @throws Exception
     * @author  ZHENWENCAN
     * @date  2017年6月9日 下午3:38:43
     */
    public void createCompressedFileList(ZipOutputStream out,List<File> filelist,List<String> namelist) throws Exception{    	
    	
    	// 压缩文件
        byte[] buffer = new byte[4096];
        int bytes_read;
        if(filelist!=null){
        	for(int i=0;i<filelist.size();i++){
        		FileInputStream in = new FileInputStream(filelist.get(i));

                ZipEntry entry = new ZipEntry(namelist.get(i).substring(0,namelist.get(i).lastIndexOf("."))+i+namelist.get(i).substring(namelist.get(i).lastIndexOf(".")));
                out.putNextEntry(entry);

                while ((bytes_read = in.read(buffer)) != -1) {
                    out.write(buffer, 0, bytes_read);
                }
        	}
        }
        
        out.closeEntry();
    }

  

    public static void main(String[] args){
        CompressedFileUtil compressedFileUtil = new CompressedFileUtil();
        
        try {
        	List<String> list = new ArrayList<String>();
        	list.add("D:/upfiles-model/大法师.xls");
        	list.add("D:/upfiles-model/测试目录.xls");
        	compressedFileUtil.compressedFileList(list, "d:/bbb","新压缩包",list);
        	//compressedFileUtil.compressedFile("D:/upfiles-model/大法师.xls","d:/bbb");
        	/*List<File> filelist = new ArrayList<File>();
        	filelist.add(new File("D:/upfiles-model/大法师.xls"));
        	filelist.add(new File("D:/upfiles-model/测试目录.xls"));
            compressedFileUtil.createCompressedFileList(filelist);*/
        	
        	/*File source = new File("D:/upfiles-model/啊啊啊.xls");
        	File dest = new File("D:/生物.xls");
        	source.renameTo(dest);*/
        	
            System.out.println("压缩文件已经生成...");
        } catch (Exception e) {
            System.out.println("压缩文件生成失败...");
            e.printStackTrace();
        }
    }

  

posted @ 2017-06-09 17:23  jassy  阅读(284)  评论(0)    收藏  举报