import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
public class ZipOutputStreamTest {
      
    //解压功能
      public static void upZipFile() throws Exception{ 
            ZipFile zfile=new ZipFile("d:\\00000120131125.zip"); 
            Enumeration zList=zfile.entries(); 
            ZipEntry ze=null; 
            byte[] buf=new byte[1024]; 
            while(zList.hasMoreElements()){ 
                ze=(ZipEntry)zList.nextElement();        
                if(ze.isDirectory()){ 
                    File f=new File("D:\\"+ze.getName()); 
                    f.mkdir(); 
                    continue; 
                } 
                OutputStream os=new BufferedOutputStream(new FileOutputStream(getRealFileName("D:\\", ze.getName()))); 
                InputStream is=new BufferedInputStream(zfile.getInputStream(ze)); 
                int readLen=0; 
                while ((readLen=is.read(buf, 0, 1024))!=-1) { 
                    os.write(buf, 0, readLen); 
                } 
                is.close(); 
                os.close();  
            } 
            zfile.close(); 
        }   
      /**
        * 给定根目录,返回一个相对路径所对应的实际文件名.
        * @param baseDir 指定根目录
        * @param absFileName 相对路径名,来自于ZipEntry中的name
        * @return java.io.File 实际的文件
        */ 
        public static File getRealFileName(String baseDir, String absFileName){ 
            String[] dirs=absFileName.split("/"); 
            File ret=new File(baseDir); 
            if(dirs.length>1){ 
                for (int i = 0; i < dirs.length-1;i++) { 
                    ret=new File(ret, dirs[i]); 
                } 
                if(!ret.exists()) 
                    ret.mkdirs(); 
                ret=new File(ret, dirs[dirs.length-1]); 
                return ret; 
            } 
            return ret; 
        } 
    /**
     * @param args
     * @throws Exception
     */
    public static void main(String[] args) throws Exception {
          
        ZipOutputStreamTest  zip = new ZipOutputStreamTest();
        zip.upZipFile();
        /*
         *
         * 文件夹压缩
        String xml; 
             
         *  生成你的xml数据,存在String xml中。
             
            
        ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream("D://test.zip")); 
        //声明ZipOutputStream,用来输出zip文件。 
          File filename = new File("D://20096");
          if(!filename.exists()){
              filename.mkdirs();
          }
          File xmld = new File("D://20096//est.xml");
          if(!xmld.exists()){
              xmld.mkdirs();
          }
        ZipEntry entry = new ZipEntry("test.xml"); 
        //声明ZipEntry 
            
        zipOut.putNextEntry(entry); 
        //将entry加入到zipOut中。 
            
        DataOutputStream dataOs = new DataOutputStream(zipOut); 
        //利用DataOutputStream对ZipOutputStream进行包装。 
        dataOs.writeUTF("UTF-8"); 
        //输出zip文件。 
        dataOs.close(); 
    */}
}