安卓客戶端帶密碼壓縮或者解壓zip文件

這個是看的別人的文章,然後改過兩行,拿到安卓上來用的
jar下載地址:http://download.csdn.net/detail/qq_24179679/9766252
操作類如下
import java.io.File;
import java.util.ArrayList;
import java.util.List;

import android.text.TextUtils;
import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.model.FileHeader;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.util.Zip4jConstants;

public class ZipUtil {

	/**
	 * 解壓指定zip文件到指定目錄
	 * @param zip  zip文件地址
	 * @param dest 解壓目錄
	 * @param pass 密碼
	 * @return
	 * @throws ZipException
	 */
	public File[] unzip(String zip, String dest, String pass) throws ZipException {
		File zipFile = new File(zip);
		return unZip(zipFile, dest, pass);
	}

	/**
	 * 解壓指定zip文件到指定目錄
	 * @param zipFile  zip文件
	 * @param dest     解壓目錄
	 * @param pass	         密碼
	 * @return
	 * @throws ZipException
	 */
	@SuppressWarnings("unchecked")
	public File[] unZip(File zipFile, String dest, String pass) throws ZipException {
		ZipFile zFile = new ZipFile(zipFile);
		zFile.setFileNameCharset("UTF-8");
		if (!zFile.isValidZipFile()) {
			throw new ZipException("文件損壞或者非ZIP文件");
		}
		File destDir = new File(dest);
		if (destDir.isDirectory() && !destDir.exists()) {
			destDir.mkdir();
		}
		if (zFile.isEncrypted()) {// 設置密碼
			zFile.setPassword(pass.toCharArray());
		}
		zFile.extractAll(dest);// 解壓
		List headerList = zFile.getFileHeaders();
		List extractedFileList = new ArrayList();
		for (FileHeader fileHeader : headerList) {
			if (!fileHeader.isDirectory()) {
				extractedFileList.add(new File(destDir, fileHeader.getFileName()));
			}
		}
		File[] extractedFiles = new File[extractedFileList.size()];
		extractedFileList.toArray(extractedFiles);
		try {
			zipFile.delete();
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		return extractedFiles;
	}
	
	/**
	 * 壓縮指定文件到指定目錄下
	 * @param src  被壓縮的源文件或者文件夾
	 * @param dest 存放位置,需要具體到壓縮後保存的名字,如   ------/xxx.zip
	 * @param pass 解壓密碼
	 */
	public void ZipAddPass(String src, String dest, String pass){
		File srcFile = new File(src);
		dest = buildDestinationZipFilePath(srcFile, dest);
		ZipParameters zipp = new ZipParameters();
		zipp.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);//壓縮方式
		zipp.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);//壓縮級別
		if (!TextUtils.isEmpty(pass)) {//設置解壓密碼
			zipp.setEncryptFiles(true);
			zipp.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD);
			zipp.setPassword(pass);
		}
		try {
			ZipFile zipFile = new ZipFile(dest);
			zipFile.setFileNameCharset("UTF-8");
			if (srcFile.isDirectory()) {
				zipFile.addFolder(src, zipp);
			}else {
				zipFile.addFile(srcFile, zipp);
			}
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	/**
	 * 創建壓縮文件存放路徑
	 * @param sourceFile  被壓縮的文件
	 * @param dest  目標路徑
	 * @return 壓縮文件存放路徑
	 */
	private String buildDestinationZipFilePath(File sourceFile, String dest){
		String result = "";
		if (TextUtils.isEmpty(dest)) {
			if (sourceFile.isDirectory()) {
				result = sourceFile.getParent() + File.separator + sourceFile.getName() + ".zip";
			}else {
				String fileName = sourceFile.getName().substring(0, sourceFile.getName().lastIndexOf("."));  
                result = sourceFile.getParent() + File.separator + fileName + ".zip";
			}
		}else {
			createifnoexit(dest);
			File destFile = new File(dest);
			if (destFile.isDirectory()) {
				if (sourceFile.isDirectory()) {
					if (dest.endsWith(File.separator)) {
						result = dest + sourceFile.getName() + ".zip";
					}else {
						result = dest + File.separator + sourceFile.getName() + ".zip";
					}
				}else {
					if (dest.endsWith(File.separator)) {
						result = dest + sourceFile.getName().substring(0, sourceFile.getName().lastIndexOf(".")) + ".zip";
					}else {
						result = dest + File.separator + sourceFile.getName().substring(0, sourceFile.getName().lastIndexOf(".")) + ".zip";
					}
				}
			}else {
				result = dest;
			}
		}
		return result;
	}
	
	private void createifnoexit(String dest){
		File destFile = null;
		if (dest.endsWith(File.separator)) {
			destFile = new File(dest);
		}else {
			destFile = new File(dest.substring(0, dest.lastIndexOf(File.separator)));
		}
		if (!destFile.exists()) {
			destFile.mkdirs();
		}
	}

}



具體調用
壓縮:
ZipUtil zipUtil = new ZipUtil();
String src = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "DCIM" + File.separator + "aaa";
String dest = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "DCIM" + File.separator + "c.zip";
 zipUtil.ZipAddPass(src, dest, "jieyamima");

解壓
ZipUtil zipUtil = new ZipUtil();
String dest = Environment.getExternalStorageDirectory().getAbsolutePath() + "/DCIM";
File mir = new File(dest);
if (mir.exists()) {
 try {
       File[] files = zipUtil.unzip(dest + "/c.zip", dest, "jieyamima");
        if (files != null) {
                            Log.e("-----------", files.length + "/");
                        }
                        for (int i = 0; i < files.length; i++) {
                            Log.e("-----------", files[i].getAbsolutePath() + "/" + files[i].getName());
                        }
                    } catch (ZipException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        Log.e("-------", "解壓失敗" + e.getMessage());
                    }
                }else {
                    Log.e("-------", "解壓失敗,DCIM文件夾不存在");
                }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章