点击下载 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);
}
}
}