apache ant 解压缩zip

本文介绍了一种利用Apache Ant工具包中的工具进行文件压缩和解压缩的方法。通过Java代码实现了文件的打包和解包功能,并详细展示了如何使用ZipOutputStream和ZipFile等API来进行操作。
摘要由CSDN通过智能技术生成

使用apache ant.tools.zip来打包和解压缩。

 package zip;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;

import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.commons.compress.utils.IOUtils;
import org.apache.tools.ant.util.FileUtils;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;
/**
 * 
 * @author Administrator cph
 *
 */


public class ZipUtils {
	ZipFile zipFile = null;
	ZipEntry zipEntry = null;
	File temp = null;
	private OutputStream out = null;
	private BufferedOutputStream bos = null;
	private ZipOutputStream zos = null;
	/**
	 * 
	 * @param zipName   需要解压的文件
	 * @param zipPath	解压存储路径
	 * @throws Exception 
	 */
	public void unZip(String zipName,String zipPath) throws Exception{
		FileOutputStream fos;
		InputStream is;
		String path1 = "";
		String tempPath = "";
		if(!new File(zipPath).exists()){
		new File(zipPath).mkdir();
		}
		zipFile = new ZipFile(zipName);
		temp = new File(zipPath);
		String strPath = temp.getAbsolutePath();
		Enumeration<Object> enu = zipFile.getEntries();
		while(enu.hasMoreElements()){
			zipEntry = (ZipEntry) enu.nextElement();
			path1 = zipEntry.getName();
			if(zipEntry.isDirectory()){
				tempPath = strPath+File.separator+path1;
				File dir = new File(tempPath);
				dir.mkdirs();
				continue;
			}
			else{
				is = zipFile.getInputStream(zipEntry);
				BufferedInputStream bis = new BufferedInputStream(is);
				path1 = zipEntry.getName();
				tempPath = strPath+File.separator+path1;
			
				String subdirtemp = path1;
				for(int i=0;i<subdirtemp.length();i++){
					if(subdirtemp.substring(i, i+1).equalsIgnoreCase("\\")){
						String tempstr = strPath+File.separator+subdirtemp.substring(0,i);
						File subdir = new File(tempstr);
						if(!subdir.exists()){
							subdir.mkdir();
						}
					}
				}
				fos = new FileOutputStream(tempPath);
				BufferedOutputStream bos = new BufferedOutputStream(fos);
//				int c ;
//				while((c = bis.read())!=-1){
//					bos.write(c);
//				}
				
				IOUtils.copy(bis, bos);
				bis.close();
				bos.close();
			}
		}
	}
	public void close() throws IOException{
		this.zos.flush();
		this.zos.close();
		this.bos.flush();
		this.bos.close();
		this.out.flush();
		this.out.close();
	}
	
	
	/**
	 * 
	 * @param zipfileName	打包后文件的名称,含路径
	 * @param filePath		需要打包的文件夹或者文件的路径
	 * @param pathName		打包到pathName文件夹下
	 * @throws Exception
	 */
	
	public void doZip(String zipfileName,String filePath,String pathName) throws Exception{
			File f = new File(zipfileName);
			this.out = new FileOutputStream(f);
			this.bos = new BufferedOutputStream(out);
			this.zos = new ZipOutputStream(bos);
			this.zos.setEncoding("GBK");
			File file = new File(filePath);
			if (!"".equals(pathName) && null != pathName) {
				pathName = pathName + File.separator;
			} else {
				pathName = f.getName().substring(0, f.getName().length() - 4) + File.separator;
			}
			doZip(zos,filePath,pathName);
			close();
	}
	
	private void doZip(ZipOutputStream zos, String file, String pathName) throws IOException {
		File file2zip = new File(file);
		if (file2zip.isFile()) {
			zos.putNextEntry(new ZipEntry(pathName + file2zip.getName()));
			IOUtils.copy(new FileInputStream(file2zip.getAbsolutePath()), zos);
			zos.closeEntry();
		} else {
			File[] files = file2zip.listFiles();
			if (files.length < 1 || files == null) {
				return;
			} else {
				for (File f : files) {
					if (f.isDirectory()) {
						doZip(zos, f.getAbsolutePath(), pathName+f.getName()+File.separator);
					} else {
						zos.putNextEntry(new ZipEntry(pathName + f.getName()));
						IOUtils.copy(new FileInputStream(f.getAbsolutePath()), zos);
						zos.closeEntry();
					}
				}
			}
		}
	}

	public static void main(String[] args) throws Exception {
		ZipUtils tzp = new ZipUtils();
//		tzp.doZip("c:/aaab.zip", "d:/a/111.ppt", "");
		tzp.unZip("c:\\aaab.zip", "d:\\abc\\");
	}
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值