`

java压缩与解压缩

阅读更多
如果出现 java.util.zip.ZipException: error in opening zip file

我搞了半天原来是 zip包本身的问题

package com;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;

  /**
   * 文件压缩与解压缩 
   * @author Administrator
   *
   */
public class Zip {
	static final int BUFFER = 2048;
	
	public static void main(String[] args) {       
		Zip bean = new Zip();       
        try {       
            bean.zip("f:/test/respackage", "f:/test/flexStudy.zip");    
        //    bean.unzip("f:/flexStudy.zip", "f:/test/"); 
      
        } catch (IOException e) {       
            e.printStackTrace();       
        }       
    }    

	/**
	 * 解压缩 zipFilename 压缩文件  outputDirectory输出路径
	 * @param zipFilename
	 * @param outputDirectory
	 * @throws IOException
	 */
	
	public synchronized void unzip(String zipFilename, String outputDirectory)
			throws IOException {
		File outFile = new File(outputDirectory);
		if (!outFile.exists()) {
			outFile.mkdirs();
		}

		ZipFile zipFile = new ZipFile(zipFilename);
		Enumeration<ZipEntry> en = (Enumeration<ZipEntry>) zipFile.entries();
		ZipEntry zipEntry = null;
		while (en.hasMoreElements()) {
			zipEntry = (ZipEntry) en.nextElement();
			if (zipEntry.isDirectory()) {
				String dirName = zipEntry.getName();
				dirName = dirName.substring(0, dirName.length() - 1);

				File f = new File(outFile.getPath() + File.separator + dirName);
				f.mkdirs();

			} else {
				File f = new File(outFile.getPath() + File.separator
						+ zipEntry.getName());
				f.createNewFile();
				InputStream in = zipFile.getInputStream(zipEntry);
				FileOutputStream out = new FileOutputStream(f);
				try {
					int c;
					byte[] by = new byte[BUFFER];
					while ((c = in.read(by)) != -1) {
						out.write(by, 0, c);
					}
				} catch (IOException e) {
					throw e;
				} finally {
					out.close();
					in.close();
				}
			}
		}
	}    

	 /**
	  * 
	  * @param inputFile  压缩目录  
	  * @param zipFilename   压缩路径名
	  * @throws IOException
	  */
	public synchronized void zip(File inputFile, String zipFilename) throws IOException {    
        ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFilename));    
   
        try {    
            zip(inputFile, out, "");    
        } catch (IOException e) {    
            throw e;    
        } finally {    
            out.close();    
        }    
    }    
   
    private synchronized void zip(File inputFile, ZipOutputStream out, String base) throws IOException {    
        if (inputFile.isDirectory()) { 
            File[] inputFiles = inputFile.listFiles();    
            out.putNextEntry(new ZipEntry(base + "/"));   
            base = base.length() == 0 ? "" : base + "/";    
            for (int i = 0; i < inputFiles.length; i++) {  
                zip(inputFiles[i], out, base + inputFiles[i].getName());    
            }    
        } else {    
            if (base.length() > 0) {    
                out.putNextEntry(new ZipEntry(base));    
            } else {    
                out.putNextEntry(new ZipEntry(inputFile.getName()));    
            }    
   
            FileInputStream in = new FileInputStream(inputFile);    
            try {    
                int c;    
                byte[] by = new byte[BUFFER];    
                while ((c = in.read(by)) != -1) {    
                    out.write(by, 0, c);    
                }    
            } catch (IOException e) {    
                throw e;    
            } finally {   
                in.close();    
            }    
        }    
    }    
    public synchronized void zip(String inputFilename, String zipFilename) throws IOException {    
        zip(new File(inputFilename), zipFilename);    
    }    
        

	
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics