点击下载 net.lingala.zip4j.core.ZipFile
import java.io.File; import net.lingala.zip4j.core.ZipFile; import net.lingala.zip4j.exception.ZipException; import net.lingala.zip4j.progress.ProgressMonitor; public class Zip4jTest001 {
/** * 进度接口 * * @author lzy * */ public interface ProgressListener {
void onStart(); void onProgress(long progress); void onError(Exception e); void onCompleted(); }
/** * @param args */ public static void main(String[] args) {
try {
unZipFileWithProgress("C:\\Users\\lzy\\Desktop\\www.zip", "C:\\Users\\lzy\\Desktop\\www", "123456", new Zip4jTest001.ProgressListener() {
@Override public void onStart() {
System.out.println("--onStart--"); }
@Override public void onProgress(long progress) {
System.out.println("--onProgress--" + progress); }
@Override public void onError(Exception e) {
System.out.println("--onCompleted--" + e.getMessage()); }
@Override public void onCompleted() {
System.out.println("--onCompleted--"); }
}, false); } catch (Exception e) {
e.printStackTrace(); }
}
/** * 解压缩zip,带解压进度 * * @param zipFilePath * @param filePath * @param password * @param listener * @param isDeleteZip * @throws ZipException */ public static void unZipFileWithProgress(final String zipFilePath, final String filePath, final String password, final ProgressListener listener, final boolean isDeleteZip) throws ZipException {
final File zipFile = new File(zipFilePath); ZipFile zFile = new ZipFile(zipFile); zFile.setFileNameCharset("utf-8"); if (!zFile.isValidZipFile()) { // throw new ZipException("exception!"); }
File destDir = new File(filePath); if (destDir.isDirectory() && !destDir.exists()) {
destDir.mkdir(); }
if (zFile.isEncrypted()) {
zFile.setPassword(password); // 设置解压密码 }
final ProgressMonitor progressMonitor = zFile.getProgressMonitor(); Thread thread = new Thread(new Runnable() {
@Override public void run() {
try {
int precentDone = 0; if (listener == null) {
return; }
listener.onStart(); while (true && !progressMonitor.isCancelAllTasks()) {
// 每隔50ms,发送一个解压进度出去 Thread.sleep(50); precentDone = progressMonitor.getPercentDone(); listener.onProgress(precentDone); if (precentDone >= 100) {
break; }
}
listener.onCompleted(); } catch (InterruptedException e) {
listener.onError(e); } finally {
if (isDeleteZip) {
zipFile.delete();// 将原压缩文件删除 }
}
}
}); thread.start(); zFile.setRunInThread(false); // true 在子线程中进行解压 , false主线程中解压 try {
zFile.extractAll(filePath); // 将压缩文件解压到filePath中... } catch (Exception e) {
progressMonitor.cancelAllTasks(); listener.onError(e); }
}
}