ZIP圧縮と解凍

2560 ワード


package com.socket.zip.util;

import java.util.*;
import java.util.zip.*;
import java.io.*;

public class ZipUtil 
{
	public void zip(String zipFileName,String inputFile)throws Exception{
		zip(zipFileName,new File(inputFile));
	}
	public void zip(String zipFileName,File inputFile)throws Exception{
		ZipOutputStream out=new ZipOutputStream(new FileOutputStream(zipFileName));
		zip(out,inputFile,"");
		System.out.println("zip done");
		out.close();
	}

	public void unzip(String zipFileName,String outputDirectory)throws Exception{
		ZipInputStream in=new ZipInputStream(new FileInputStream(zipFileName));
		ZipEntry z;
		while ((z=in.getNextEntry() )!= null)
		{
			System.out.println("unziping "+z.getName());
			if (z.isDirectory())
			{
				String name=z.getName();
				name=name.substring(0,name.length()-1);
				File f=new File(outputDirectory+File.separator+name);
				f.mkdir();
				System.out.println("mkdir "+outputDirectory+File.separator+name);
			}
			else{
				File f=new File(outputDirectory+File.separator+z.getName());
				f.createNewFile();
				FileOutputStream out=new FileOutputStream(f);
				int b;
				while ((b=in.read()) != -1)
					out.write(b);
				out.close();
			}
		}

		in.close();
	}

	public void zip(ZipOutputStream out,File f,String base)throws Exception{
		System.out.println("Zipping  "+f.getName());
		if (f.isDirectory())
		{
			File[] fl=f.listFiles();
			out.putNextEntry(new ZipEntry(base+"/"));
			base=base.length()==0?"":base+"/";
			for (int i=0;i<fl.length ;i++ )
			{
				zip(out,fl[i],base+fl[i].getName());
			}
		}
		else
		{
			out.putNextEntry(new ZipEntry(base));
			FileInputStream in=new FileInputStream(f);
			int b;
			while ((b=in.read()) != -1)
				out.write(b);
			in.close();
		}

	}
	
	
	public static void main(String[] args) 
	{
		try{
		ZipUtil t=new ZipUtil();
		t.zip("D:\\wulihai\\SocketTrans.zip","D:\\wulihai\\SocketTrans");
		t.unzip("D:\\wulihai\\SocketTrans.zip","D:\\wulihai\\ ");
		}
		catch(Exception e){e.printStackTrace(System.out);}
	}
}