Java Zip 压缩、解压

原创 2016年06月02日 00:00:37
package com.chy.utils;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Locale;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

import android.text.TextUtils;

/**
 * zip压缩解压工具
 */
public class ZipUtils {
	private static final int BUFF_SIZE = 1024;

	/**
	 * @param zos
	 *            压缩流
	 * @param parentDirName
	 *            父目录
	 * @param file
	 *            待压缩文件
	 * @param buffer
	 *            缓冲区
	 * @return 只要目录中有一个文件压缩失败,就停止并返回
	 */
	private static boolean zipFile(ZipOutputStream zos, String parentDirName, File file, byte[] buffer) {
		String zipFilePath = parentDirName + file.getName();
		if (file.isDirectory()) {
			zipFilePath += File.separator;
			for (File f : file.listFiles()) {
				if (!zipFile(zos, zipFilePath, f, buffer)) {
					return false;
				}
			}
			return true;
		} else {
			try {
				BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
				ZipEntry zipEntry = new ZipEntry(zipFilePath);
				zipEntry.setSize(file.length());
				zos.putNextEntry(zipEntry);
				while (bis.read(buffer) != -1) {
					zos.write(buffer);
				}
				bis.close();
				return true;
			} catch (FileNotFoundException ex) {
				ex.printStackTrace();
			} catch (IOException ex) {
				ex.printStackTrace();
			}
			return false;
		}
	}

	/**
	 * @param srcPath
	 *            待压缩的文件或目录
	 * @param dstPath
	 *            压缩后的zip文件
	 * @return 只要待压缩的文件有一个压缩失败就停止压缩并返回(等价于windows上直接进行压缩)
	 */
	public static boolean zipFile(String srcPath, String dstPath) {
		File srcFile = new File(srcPath);
		if (!srcFile.exists()) {
			return false;
		}
		byte[] buffer = new byte[BUFF_SIZE];
		try {
			ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(dstPath));
			boolean result = zipFile(zos, "", srcFile, buffer); 
			zos.close();
			return result;
		} catch (FileNotFoundException ex) {
			ex.printStackTrace();
		} catch (IOException ex) {
			ex.printStackTrace();
		}
		return false;
	}

	/**
	 * @param srcPath
	 *            待解压的zip文件
	 * @param dstPath
	 *            zip解压后待存放的目录
	 * @return 只要解压过程中发生错误,就立即停止并返回(等价于windows上直接进行解压)
	 */
	public static boolean unzipFile(String srcPath, String dstPath) {
		if(TextUtils.isEmpty(srcPath) || TextUtils.isEmpty(dstPath)) {
			return false;
		}
		File srcFile = new File(srcPath);
		if(!srcFile.exists() || !srcFile.getName().toLowerCase(Locale.getDefault()).endsWith("zip")) {
			return false;
		}
		File dstFile = new File(dstPath);
		if(!dstFile.exists() || !dstFile.isDirectory()) {
			dstFile.mkdirs();
		}
		try {
			ZipInputStream zis = new ZipInputStream(new FileInputStream(srcFile));
			BufferedInputStream bis = new BufferedInputStream(zis);
			ZipEntry zipEntry = null;
			byte[] buffer = new byte[BUFF_SIZE];
			if(!dstPath.endsWith(File.separator)) {
				dstPath += File.separator;
			}
			while((zipEntry = zis.getNextEntry()) != null) {
				String fileName = dstPath + zipEntry.getName();
				File file = new File(fileName);
				File parentDir = file.getParentFile();
				if(!parentDir.exists()) {
					parentDir.mkdirs();
				}
				FileOutputStream fos = new FileOutputStream(file);
				while(bis.read(buffer) != -1) {
					fos.write(buffer);
				}
				fos.close();
			}
			bis.close();
			zis.close();
			return true;
		} catch (FileNotFoundException ex) {
			ex.printStackTrace();
		} catch (IOException ex) {
			ex.printStackTrace();
		}
		return false;
	}
}

版权声明:转载请注明出处——http://blog.csdn.net/chy555chy/article

相关文章推荐

java解压zip或者rar压缩文件

package com.bjy.util; import java.io.File; import java.io.FileOutputStream; import java.util.re...

java解压zip或rar压缩文件(有源码和jar包以及对中文乱码的处理方法)

package com.bjy.util; import java.io.File; import java.io.FileOutputStream; import java.util.regex....

java 处理zip压缩/解压 文件/目录

环境操作系统: win7 java: jdk7需求需要把多个jar进行打包,方便上传。步骤这里我们需要用到的java api有:ZipOutputStream、ZipEntry。单个文件的压缩 ...

JAVA实现实用的ZIP压缩与解压

程序实现了ZIP压缩。共分为2部分 : 压缩(compression)与解压(decompression) 大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和...

JAVA压缩/解压ZIP

使用ant.jar中的org.apache.tools.zip.* import java.io.BufferedInputStream; import java.io.File; impo...

JAVA实现实用的ZIP压缩与解压

程序实现了ZIP压缩。共分为2部分 : 压缩(compression)与解压(decompression) 大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压...

JAVA实现实用的ZIP压缩与解压

程序实现了ZIP压缩。共分为2部分 : 压缩(compression)与解压(decompression) 大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解...

java利用Ant解压指定zip压缩包到指定文件夹

上一篇介绍了java利用ant压缩指定文件夹:地址是这里:http://blog.csdn.net/zp357252539/article/details/51712467, 本文则继续完成把压缩包...

JAVA API实现ZIP压缩与解压

程序实现了ZIP压缩。共分为2部分 : 压缩(compression)与解压(decompression) 大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压...

JAVA实现实用的ZIP压缩与解压

程序实现了ZIP压缩。共分为2部分 : 压缩(compression)与解压(decompression) 大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)