jdk提供了Zip相关的类方便的实现压缩和解压缩。使用方法很简单。下边分别是压缩和解压缩的简单事例
1,压缩的
 import java.io.BufferedInputStream;
import java.io.BufferedInputStream;
 import java.io.BufferedOutputStream;
import java.io.BufferedOutputStream;
 import java.io.File;
import java.io.File;
 import java.io.FileInputStream;
import java.io.FileInputStream;
 import java.io.FileOutputStream;
import java.io.FileOutputStream;
 import java.util.zip.ZipEntry;
import java.util.zip.ZipEntry;
 import java.util.zip.ZipOutputStream;
import java.util.zip.ZipOutputStream;


 public class Zip
public class Zip  {
{
 static final int BUFFER = 2048;
    static final int BUFFER = 2048;


 public static void main(String argv[])
    public static void main(String argv[])  {
{

 try
        try  {
{
 BufferedInputStream origin = null;
            BufferedInputStream origin = null;
 FileOutputStream dest = new FileOutputStream("E:\\test\\myfiles.zip");
            FileOutputStream dest = new FileOutputStream("E:\\test\\myfiles.zip");
 ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(
            ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(
 dest));
                    dest));
 byte data[] = new byte[BUFFER];
            byte data[] = new byte[BUFFER];
 File f = new File("e:\\test\\a\\");
            File f = new File("e:\\test\\a\\");
 File files[] = f.listFiles();
            File files[] = f.listFiles();


 for (int i = 0; i < files.length; i++)
            for (int i = 0; i < files.length; i++)  {
{
 FileInputStream fi = new FileInputStream(files[i]);
                FileInputStream fi = new FileInputStream(files[i]);
 origin = new BufferedInputStream(fi, BUFFER);
                origin = new BufferedInputStream(fi, BUFFER);
 ZipEntry entry = new ZipEntry(files[i].getName());
                ZipEntry entry = new ZipEntry(files[i].getName());
 out.putNextEntry(entry);
                out.putNextEntry(entry);
 int count;
                int count;

 while ((count = origin.read(data, 0, BUFFER)) != -1)
                while ((count = origin.read(data, 0, BUFFER)) != -1)  {
{
 out.write(data, 0, count);
                    out.write(data, 0, count);
 }
                }
 origin.close();
                origin.close();
 }
            }
 out.close();
            out.close();

 } catch (Exception e)
        } catch (Exception e)  {
{
 e.printStackTrace();
            e.printStackTrace();
 }
        }
 }
    }
 }
}

2,解压缩的。
 import java.io.BufferedInputStream;
import java.io.BufferedInputStream;
 import java.io.BufferedOutputStream;
import java.io.BufferedOutputStream;
 import java.io.File;
import java.io.File;
 import java.io.FileOutputStream;
import java.io.FileOutputStream;
 import java.util.Enumeration;
import java.util.Enumeration;
 import java.util.zip.ZipEntry;
import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
import java.util.zip.ZipFile;


 public class UnZip
public class UnZip  {
{
 static final int BUFFER = 2048;
    static final int BUFFER = 2048;


 public static void main(String argv[])
    public static void main(String argv[])  {
{

 try
        try  {
{
 String fileName = "E:\\test\\myfiles.zip";
            String fileName = "E:\\test\\myfiles.zip";
 String filePath = "E:\\test\\";
            String filePath = "E:\\test\\";
 ZipFile zipFile = new ZipFile(fileName);
            ZipFile zipFile = new ZipFile(fileName);
 Enumeration emu = zipFile.entries();
            Enumeration emu = zipFile.entries();
 int i=0;
            int i=0;

 while(emu.hasMoreElements())
            while(emu.hasMoreElements()) {
{
 ZipEntry entry = (ZipEntry)emu.nextElement();
                ZipEntry entry = (ZipEntry)emu.nextElement();
 //会把目录作为一个file读出一次,所以只建立目录就可以,之下的文件还会被迭代到。
                //会把目录作为一个file读出一次,所以只建立目录就可以,之下的文件还会被迭代到。
 if (entry.isDirectory())
                if (entry.isDirectory())

 
                 {
{
 new File(filePath + entry.getName()).mkdirs();
                    new File(filePath + entry.getName()).mkdirs();
 continue;
                    continue;
 }
                }
 BufferedInputStream bis = new BufferedInputStream(zipFile.getInputStream(entry));
                BufferedInputStream bis = new BufferedInputStream(zipFile.getInputStream(entry));
 File file = new File(filePath + entry.getName());
                File file = new File(filePath + entry.getName());
 //加入这个的原因是zipfile读取文件是随机读取的,这就造成可能先读取一个文件
                //加入这个的原因是zipfile读取文件是随机读取的,这就造成可能先读取一个文件
 //而这个文件所在的目录还没有出现过,所以要建出目录来。
                //而这个文件所在的目录还没有出现过,所以要建出目录来。
 File parent = file.getParentFile();
                File parent = file.getParentFile();

 if(parent != null && (!parent.exists()))
                if(parent != null && (!parent.exists())) {
{
 parent.mkdirs();
                    parent.mkdirs();
 }
                }
 FileOutputStream fos = new FileOutputStream(file);
                FileOutputStream fos = new FileOutputStream(file);
 BufferedOutputStream bos = new BufferedOutputStream(fos,BUFFER);
                BufferedOutputStream bos = new BufferedOutputStream(fos,BUFFER);           
 
                
 int count;
                int count;
 byte data[] = new byte[BUFFER];
                byte data[] = new byte[BUFFER];
 while ((count = bis.read(data, 0, BUFFER)) != -1)
                while ((count = bis.read(data, 0, BUFFER)) != -1)

 
                 {
{
 bos.write(data, 0, count);
                    bos.write(data, 0, count);
 }
                }
 bos.flush();
                bos.flush();
 bos.close();
                bos.close();
 bis.close();
                bis.close();
 }
            }
 zipFile.close();
            zipFile.close();

 } catch (Exception e)
        } catch (Exception e)  {
{
 e.printStackTrace();
            e.printStackTrace();
 }
        }
 }
    }
 }
}
