Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android系統教程 >> Android開發教程 >> Android Zip壓縮工具類

Android Zip壓縮工具類

編輯:Android開發教程

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
	 *            緩沖區
	 *URL:http://www.bianceng.cn/OS/extra/201609/50420.htm
	 * @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;
	}
}
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved