java zip打包压缩制定编码格式

Posted HiveDark

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java zip打包压缩制定编码格式相关的知识,希望对你有一定的参考价值。

Java打包压缩代码


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * zip打包工具类
* @version 1.0 
* @since 2020年2月25日 下午2:24:59
 */
public class ZipUtil 
	private final static Logger logger = LoggerFactory.getLogger(ZipUtil.class);
    private ZipUtil()
    /** 
     * 创建ZIP文件 
     * @param sourcePath 文件或文件夹路径 
     * @param zipPath 生成的zip文件存在路径(包括文件名) 
     * @param isDrop  是否删除原文件:true删除、false不删除
     */  
    public static void createZip(String sourcePath, String zipPath,Boolean isDrop)   
        FileOutputStream fos = null;  
        ZipOutputStream zos = null;  
        try   
            fos = new FileOutputStream(zipPath);  
            zos = new ZipOutputStream(fos, Charset.forName("GBK"));  
            writeZip(new File(sourcePath), "", zos,isDrop);  
         catch (Exception e) 
        	logger.error("创建ZIP文件失败",e);
         finally   
            try   
                if (zos != null)   
                    zos.close();
                    zos = null;
                  
             catch (IOException e)   
            	logger.error("创建ZIP文件失败",e);  
              
          
    
    
    /**
     * 清空文件和文件目录
     * @param f
     */
    public static void clean(File f) throws Exception 
        File cs[] = f.listFiles();
        if (cs == null || cs.length <= 0) 
            boolean isDelete = f.delete();
            if (!isDelete) 
                logger.error("delFile:[ " + f.getName() + "文件删除失败!" + " ]");
                throw new Exception(f.getName() + "文件删除失败!");
            
         else 
            for (int i = 0; i < cs.length; i++) 
            	File f2 = cs[i];
                if (f2.exists() && f2.isFile()) 
                    boolean isDelete = f2.delete();
                    if (!isDelete) 
                    	logger.error("delFile:[ " + f2.getName() + "文件删除失败!" + " ]");
                        throw new Exception(f2.getName() + "文件删除失败!");
                    
                 else if (f2.exists() && f2.isDirectory()) 
                    clean(f2);
                
            
            boolean isDelete = f.delete();
            if (!isDelete) 
            	logger.error("delFile:[ " + f.getName() + "文件删除失败!" + " ]");
                throw new Exception(f.getName() + "文件删除失败!");
            
        
    
    
    /**
     * 文件打包压缩
     * @param file
     * @param parentPath
     * @param zos
     * @param isDrop
     */
    private static void writeZip(File file, String parentPath, ZipOutputStream zos,Boolean isDrop) throws Exception  
        if(file.exists())  
            if(file.isDirectory())
            	//处理文件夹  
                parentPath += file.getName()+File.separator;  
                File [] files=file.listFiles();  
                if(files.length != 0)  
                  
                    for(File f:files)  
                        writeZip(f, parentPath, zos,isDrop);  
                    
                
                else  
                   //空目录则创建当前目录  
                    try   
                        zos.putNextEntry(new ZipEntry(parentPath));  
                     catch (IOException e)   
                        e.printStackTrace();  
                      
                
            else  
                FileInputStream fis=null;  
                try   
                    fis=new FileInputStream(file);  
                    ZipEntry ze = new ZipEntry(parentPath + file.getName());  
                    zos.putNextEntry(ze);  
                    byte [] content=new byte[1024];  
                    int len;  
                    while((len=fis.read(content))!=-1)  
                        zos.write(content,0,len);  
                        zos.flush();  
                      
                 catch (Exception e)   
                	logger.error("创建ZIP文件失败",e);  
                 finally  
                    try   
                        if(fis!=null)  
                            fis.close();  
                          
                        if(isDrop)
                             clean(file);
                        
                     catch(Exception e)  
                    	logger.error("创建ZIP文件失败",e);  
                     
                  
              
          
    

linux解压

unzip -O GBK xxx.zip

以上是关于java zip打包压缩制定编码格式的主要内容,如果未能解决你的问题,请参考以下文章

java zip打包压缩制定编码格式

java zip打包压缩制定编码格式

zip压缩工具 tar打包打包并压缩

6.5 zip压缩工具;6.6 tar打包;6.7 打包并压缩

压缩解压缩 和 打包解打包 命令

java批量下载,将多文件打包成zip格式下载