• Java ZIP压缩文件使用总结


    做Java Web开发,有时候遇到将多个文件或者文件夹压缩成一个.zip文件,供前端下载。Java的JDK中提供一个java.util.zip的接口,供大家使用。如下图:

    图上就是Java 的JDK提供的接口,但是压缩文件或者文件夹的时候,怎么使用上面的接口呢?下面我给出几个相关的接口,这些接口是下面压缩文件或者文件夹过程中使用到的。

    java.util.zip.ZipEntry;
    java.util.zip.ZipOutputStream;

    下面的压缩过程主要是通过这两个接口压缩文件或者文件夹;

    下面先给出源码,后面详细介绍的接口中的方法:

    package ZIPUtil;
    
    import java.io.BufferedInputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.zip.CRC32;
    import java.util.zip.CheckedOutputStream;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipOutputStream;
    
    /**
     * 学习使用java.util.zip压缩文件或者文件夹
     * @author lhm
     *
     */
    
    public class ZIPUtil {
    
    	/**
    	 * @param args 主方法
    	 */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		//第一个参数是需要压缩的源路径;第二个参数是压缩文件的目的路径,这边需要将压缩的文件名字加上去
    		compress("H:\zip/scala","H:\zip/oo.zip");
    	}
    
    	/**s
    	 * 压缩文件
    	 * @param srcFilePath 压缩源路径 
    	 * @param destFilePath 压缩目的路径
    	 */
    	public static void compress(String srcFilePath, String destFilePath) {
    		//
            File src = new File(srcFilePath);
    
            if (!src.exists()) {
                throw new RuntimeException(srcFilePath + "不存在");
            }
            File zipFile = new File(destFilePath);
    
            try {
    
                FileOutputStream fos = new FileOutputStream(zipFile);
                ZipOutputStream zos = new ZipOutputStream(fos);
                String baseDir = "";
                compressbyType(src, zos, baseDir);
                zos.close();
    
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
    
            }
        }
    	/**
    	 * 按照原路径的类型就行压缩。文件路径直接把文件压缩,
    	 * @param src 
    	 * @param zos
    	 * @param baseDir
    	 */
    	 private static void compressbyType(File src, ZipOutputStream zos,String baseDir) {
    
    	        if (!src.exists())
    	            return;
    	        System.out.println("压缩路径" + baseDir + src.getName());
    	        //判断文件是否是文件,如果是文件调用compressFile方法,如果是路径,则调用compressDir方法;
    	        if (src.isFile()) {
    	        	//src是文件,调用此方法
    	            compressFile(src, zos, baseDir);
    	            
    	        } else if (src.isDirectory()) {
    	        	//src是文件夹,调用此方法
    	            compressDir(src, zos, baseDir);
    
    	        }
    
    	    }
    	 
    	    /**
    	     * 压缩文件
    	    */
    	    private static void compressFile(File file, ZipOutputStream zos,String baseDir) {
    	        if (!file.exists())
    	            return;
    	        try {
    	            BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
    	            ZipEntry entry = new ZipEntry(baseDir + file.getName());
    	            zos.putNextEntry(entry);
    	            int count;
    	            byte[] buf = new byte[1024];
    	            while ((count = bis.read(buf)) != -1) {
    	                zos.write(buf, 0, count);
    	            }
    	            bis.close();
    
    	        } catch (Exception e) {
    	          // TODO: handle exception
    
    	        }
    	    }
    	    
    	    /**
    	     * 压缩文件夹
    	     */
    	    private static void compressDir(File dir, ZipOutputStream zos,String baseDir) {
    	        if (!dir.exists())
    	            return;
    	        File[] files = dir.listFiles();
    	        if(files.length == 0){
    	            try {
    	                zos.putNextEntry(new ZipEntry(baseDir + dir.getName()+File.separator));
    	            } catch (IOException e) {
    	                e.printStackTrace();
    	            }
    	        }
    	        for (File file : files) {
    	            compressbyType(file, zos, baseDir + dir.getName() + File.separator);
    	        }
    	}
    }
    

      java.util.zip-压缩流程:

    先将文件加载到文件流FileInputStream中,再将文件流输入到ZipOutputStream;

    源文件路径:H:\zip/scala,目的压缩文件zip的路径:H:\zip/oo.zip

  • 相关阅读:
    第九周
    第八周
    第七周
    代码复审核查表
    对软件开发的理解
    第六周
    网站流量分析架构及实现
    hive的sql语句
    精简客户端搭建Oracle数据库
    idaa搭建maven发布tomcat
  • 原文地址:https://www.cnblogs.com/lihaiming93/p/8098255.html
Copyright © 2020-2023  润新知