使用Zip4j分卷压缩和解压缩

  • 添加Maven依赖,zip4j.jar包
        
			  net.lingala.zip4j
              zip4j
              1.3.2
       
  • 分卷压缩(支持多个文件的合并压缩和使用指定密码)
    /**
    * 分卷压缩
    * @param srcFiles 要压缩的文件绝对路径列表(支持多个文件的合并压缩)
    * @param destFile 要压缩的zip文件名
    * @param passwd   压缩密码
    * @param fileSize 分卷大小
    * @return 压缩文件路径(如分卷会返回以 "," 分隔的文件路径列表)
    * @throws ZipException
    */
    public static String zip(List srcFiles,String destFile, String passwd,long fileSize) throws ZipException{
    	String zipFiles = null;
	   	File tmpFile = new File(destFile);
	   	if(tmpFile.exists()){
	   		tmpFile.delete();
	   	}
	   	
	   	net.lingala.zip4j.core.ZipFile zipFile = new net.lingala.zip4j.core.ZipFile(destFile);
	   	
	   	ArrayList filesToAdd = new ArrayList();
	   	if(srcFiles!=null&&srcFiles.size()>0){
	   		
	   		int fileCount = srcFiles.size();
	   		for(int i=0;i zipList = zipFile.getSplitZipFiles();
            if(zipList!=null&&zipList.size()>0){
            	String surFix = ".z010";
            	String surFixReplace = ".z10";
            	for(int i=0;i
  • 解压指定的ZIP压缩文件到指定目录 (支持分卷压缩解压和使用指定密码)
	/** 
     * 解压缩(支持分卷压缩解压)
     * @param zipFilePath 指定的ZIP压缩文件 路径
     * @param dest 解压目录 
     * @param passwd ZIP文件的密码 。需要解压密码时必须传入,否则传入null即可
     * @return  解压后文件名数组 
     * @throws ZipException 压缩文件有损坏或者解压缩失败抛出 
     */  
    @SuppressWarnings("unchecked")
	public static String[] unzip(String zipFilePath, String dest, String passwd) throws ZipException {
    	File zipFile = new File(zipFilePath);
    	net.lingala.zip4j.core.ZipFile zFile = new net.lingala.zip4j.core.ZipFile(zipFile);
        zFile.setFileNameCharset("GBK");
        if(!zFile.isValidZipFile()) {
            throw new ZipException("压缩文件不合法,可能被损坏!");
        }
        
        File destDir = new File(dest);  
        if(destDir.isDirectory() && !destDir.exists()) {  
            destDir.mkdir();  
        }
        
        if(zFile.isEncrypted()) {
        	if(StringUtil.isBlank(passwd)) {
        		throw new ZipException("文件已加密,需要解压密码,解压密码不能为空!");
        	}else {
        		zFile.setPassword(passwd.toCharArray());
        	}
        }
        zFile.extractAll(dest);
        
        List extractedFileList = new ArrayList();
        
        List headerList = zFile.getFileHeaders();
        if(headerList!=null&&headerList.size()>0) {
        	for(FileHeader fileHeader:headerList) {
                if(!fileHeader.isDirectory()) {
                    extractedFileList.add(fileHeader.getFileName());
                }
            }
        }
        
        String[] extractedFiles = new String[extractedFileList.size()];
        extractedFileList.toArray(extractedFiles);
        return extractedFiles;
    }
  • main
   public static void main(String[] args) {
	   
	     //带压缩文件集合
	   	List srcFiles = new ArrayList();
	   	srcFiles.add("C:/test/a.xls");
	   	srcFiles.add("C:/test/b.xls");
	   	srcFiles.add("C:/test/c.xls");
	   	srcFiles.add("C:/test/d.xls");

	   	String destFile = "C:/test/a.zip"; //压缩路径
	   	
	   	String passwd  = "123"; //压缩包密码
	   	long fileSize = 65536; //分卷大小(当前为最小值)
	   	
	   	try {
				//1.压缩
				System.out.println(zip(srcFiles,destFile,passwd,fileSize));
	   		
	   			//2.解压
	   			String[] extractedFiles=unzip(destFile, "C:/test/a", passwd);
	   			for (int i = 0; i < extractedFiles.length; i++) {
	   				System.out.println(extractedFiles[i]);
				}
				
			} catch (ZipException e) {
				e.printStackTrace();
			}
	
   }

你可能感兴趣的:(JAVA)