java的压缩和解压demo

曹渝
2023-12-01

今天看了一下think in java   的压缩和解压这块,感觉用到的挺多的,做个笔记

/**
* Project Name:mynio
* File Name:ZipCompress.java
* Package Name:com.zsy.zip
* Date:2016-8-22下午10:04:04
* Copyright (c) 
*
*/

package com.zsy.zip;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Enumeration;
import java.util.zip.Adler32;
import java.util.zip.CheckedInputStream;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

public class ZipCompress
{
    
    /**
     * main:(这里用一句话描述这个方法的作用). <br/>
     * @author syzhao
     * @param args
     * @throws Exception 
     * @since JDK 1.6
     */
    public static void main(String[] args)
        throws Exception
    {
        //文件输出流   在这里我直接创建好了一个test.zip   当然可以动态创建,这里不多说了
        FileOutputStream fos = new FileOutputStream(new File("D:/test.zip"));
        //校验过滤流,,顾名思义 于维护数据校验和用于维护数据完整性的   Checksum有两种类型:Adler32(快一些)和CRC32(慢一些,但更准确) 根据需要衡量一下
        CheckedOutputStream cos = new CheckedOutputStream(fos, new Adler32());
        //压缩输出流
        ZipOutputStream zos = new ZipOutputStream(cos);
        //缓冲
        BufferedOutputStream bos = new BufferedOutputStream(zos);
        //注释
        zos.setComment("这是一个测试");
        //对于每一个要要加入压缩档案的文件,都必须调用putNextEntry,并出入一个ZipEntry对象;至于有什么用自行百度,,,,,
        zos.putNextEntry(new ZipEntry("WeatherWS11.js"));//WeatherWS11.js 这个是打开zip文件后看到的文件名称,可以测试一下
        //缓冲reader
        // BufferedReader br = new BufferedReader(new FileReader(new File("D:/WeatherWS.js")));
        //读取要压缩的文件内容,可以注释掉,,
        /*int c;
        while ((c = br.read()) != -1)
        {
            bos.write(c);
        }
        br.close();*/
        System.err.println("Checksum:" + cos.getChecksum().getValue());
        bos.close();
        /************************以上输出zip,结束**************************/
        
        /************************以下读取zip,开始**************************/
        
        System.out.println("读取文件:");
        //文件输入流
        FileInputStream fis = new FileInputStream(new File("D:/test.zip"));
        //校验过滤流,,顾名思义 于维护数据校验和用于维护数据完整性的   Checksum有两种类型:Adler32(快一些)和CRC32(慢一些,但更准确) 根据需要衡量一下
        CheckedInputStream cis = new CheckedInputStream(fis, new Adler32());
        //zip流
        ZipInputStream zis = new ZipInputStream(cis);
        //缓冲
        BufferedInputStream bis = new BufferedInputStream(zis);
        
        ZipEntry ze;
        while ((ze = zis.getNextEntry()) != null)
        {
            System.out.println("rend file:" + ze);
            int x;
            while ((x = bis.read()) != -1)
            {
                //  System.out.println(x);
            }
        }
        
        bis.close();
        
        /***************解压结束******************************/
        
        //解压更简单的方法
        ZipFile zf = new ZipFile("D:/test.zip");
        Enumeration e = zf.entries();
        while (e.hasMoreElements())
        {
            ZipEntry z = (ZipEntry)e.nextElement();
            System.out.println("file:" + z);
        }
        
        zf.close();
    }
    
}


 类似资料: