Java学习之使用net.lingala.zip4j.core.ZipFile解压缩文件,带解压缩进度


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




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值