Zip 压缩 解压

1

     ant.jar

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.List;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;

/**
 * 功能: 1 、实现把指定文件夹下的所有文件压缩为指定文件夹下指定 zip 文件 2 、实现把指定文件夹下的 zip 文件解压到指定目录下
 */

public class ZipUtils {

	public static void unZip(String dic) {
		// 从本地目录获取已经转移到的压缩文件
		List<File> fileList = FileUtil.getMoveFiles(dic);
		// 遍历文件
		for (File file : fileList) {
			String tempFile = file.getName();
			// 解压压缩文件
			ZipUtils.unZip(dic + tempFile, dic);
			// 删除压缩文件
			FileUtil.delFiles(new File(dic + tempFile));
		}
	}

	/**
	 * 功能:把 所有文件进行 zip 格式的压缩,保存为指定 zip 文件
	 * 
	 * @param sourceDir
	 * @param zipFile
	 */

	public static void zip(List<File> flist, String tmpFile) throws Exception {

		OutputStream os1;// 工作空间

		try {
			os1 = new FileOutputStream(tmpFile);

			BufferedOutputStream bos1 = new BufferedOutputStream(os1);

			ZipOutputStream zos1 = new ZipOutputStream(bos1);

			zipFile(flist, zos1);

			zos1.closeEntry();
			zos1.close();

		} catch (Exception e) {
			throw e;
		}

	}

	// 读取本地文件函数
	public static byte[] readToString(File file) throws Exception {
		// 获取文件长度
		Long filelength = file.length();
		// 创建相应的数组
		byte[] filecontent = new byte[filelength.intValue()];
		// 创建流
		FileInputStream in = new FileInputStream(file);
		try {
			// 读取文件
			in.read(filecontent);
		} finally {
			in.close();
		}
		// 返回文件内容
		return filecontent;
	}

	/**
	 * 功能:执行文件压缩成zip文件
	 */

	private static void zipFile(List<File> flist, ZipOutputStream zos)
			throws Exception {
		for (File file : flist) {
			String pathName = file.getName();
			zos.putNextEntry(new ZipEntry(pathName));
			zos.write(readToString(file));
		}

	}

	/**
	 * 功能:解压 zip 文件,只能解压 zip 文件
	 * 
	 * @param zipfile
	 * @param destDir
	 */

	@SuppressWarnings("rawtypes")
	public static void unZip(String zipfile, String destDir) {
		destDir = destDir.endsWith("\\") ? destDir : destDir + "\\";
		byte b[] = new byte[1024];
		int length;
		ZipFile zipFile;
		try {
			zipFile = new ZipFile(new File(zipfile));
			Enumeration enumeration = zipFile.getEntries();
			ZipEntry zipEntry = null;
			while (enumeration.hasMoreElements()) {
				zipEntry = (ZipEntry) enumeration.nextElement();
				File loadFile = new File(destDir + zipEntry.getName());
				if (zipEntry.isDirectory()) {
					loadFile.mkdirs();
				} else {
					if (!loadFile.getParentFile().exists()) {
						loadFile.getParentFile().mkdirs();
					}
					OutputStream outputStream = new FileOutputStream(loadFile);
					InputStream inputStream = zipFile.getInputStream(zipEntry);
					while ((length = inputStream.read(b)) > 0)
						outputStream.write(b, 0, length);
				}
			}
		} catch (IOException e) {
			e.printStackTrace();

		}
	}

	/**
	 * 根据路径删除指定的目录或文件,无论存在与否
	 * 
	 * @param sPath
	 *            要删除的目录或文件
	 * @return 删除成功返回 true,否则返回 false。
	 */
	public static boolean deleteFolder(String sPath) {
		Boolean flag = false;
		File file = new File(sPath);
		// 判断目录或文件是否存在
		if (!file.exists()) { // 不存在返回 false
			return flag;
		} else {
			// 判断是否为文件
			if (file.isFile()) { // 为文件时调用删除文件方法
				return deleteFile(sPath);
			} else { // 为目录时调用删除目录方法
				return deleteDirectory(sPath);
			}
		}
	}

	/**
	 * 删除单个文件
	 * 
	 * @param sPath
	 *            被删除文件的文件名
	 * @return 单个文件删除成功返回true,否则返回false
	 */
	public static boolean deleteFile(String sPath) {
		Boolean flag = false;
		File file = new File(sPath);
		// 路径为文件且不为空则进行删除
		if (file.isFile() && file.exists()) {
			file.delete();
			flag = true;
		}
		return flag;
	}

	/**
	 * 删除目录(文件夹)以及目录下的文件
	 * 
	 * @param sPath
	 *            被删除目录的文件路径
	 * @return 目录删除成功返回true,否则返回false
	 */
	public static boolean deleteDirectory(String sPath) {
		// 如果sPath不以文件分隔符结尾,自动添加文件分隔符
		if (!sPath.endsWith(File.separator)) {
			sPath = sPath + File.separator;
		}
		File dirFile = new File(sPath);
		// 如果dir对应的文件不存在,或者不是一个目录,则退出
		if (!dirFile.exists() || !dirFile.isDirectory()) {
			return false;
		}
		Boolean flag = true;
		// 删除文件夹下的所有文件(包括子目录)
		File[] files = dirFile.listFiles();
		for (int i = 0; i < files.length; i++) {
			// 删除子文件
			if (files[i].isFile()) {
				flag = deleteFile(files[i].getAbsolutePath());
			} // 删除子目录
			else {
				flag = deleteDirectory(files[i].getAbsolutePath());
			}
		}
		if (!flag)
			return false;
		// 删除当前目录
		if (dirFile.delete()) {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * @Description
	 * @param source
	 * @param target
	 * @throws IOException
	 */
	public static void customBufferBufferedStreamCopy(File source, File target)
			throws IOException {
		InputStream fis = null;
		OutputStream fos = null;
		try {
			fis = new BufferedInputStream(new FileInputStream(source));
			fos = new BufferedOutputStream(new FileOutputStream(target));
			byte[] buf = new byte[4096];
			int i;
			while ((i = fis.read(buf)) != -1) {
				fos.write(buf, 0, i);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			fis.close();
			fos.close();
		}
	}

2

3


你可能感兴趣的:(Zip 压缩 解压)