Zip4j没有错误,即使出现了错误,但全部解压失败。

问题描述 投票:0回答:1

我使用zip4j来解压压缩包,这些压缩包是由密码(AES-256)保护的。我的问题不是代码不能用,而是当密码与.zip中的实际密码不匹配时,它不会出现任何错误。

.zip的密码是123,而我给zip4j设置的密码是123456789。所以他无法提取所有的文件。我希望得到一个Error或任何信息,说它无法提取。实际情况是,他没有提取,但没有异常或错误信息,什么都没有。

有什么办法可以让我检查解压是否成功?

 protected void unpackZip(String destinationPath, String archivePath) throws InterruptedException {
    int onChange = 0;

    try {
        ZipFile zipFile = new ZipFile( archivePath );

        zipFile.setRunInThread( true );

        if (zipFile.isEncrypted()) {
            zipFile.setPassword( "123456789");
        }

        zipFile.extractAll( destinationPath );

        // http://www.lingala.net/zip4j/forum/index.php?topic=68.0
        ProgressMonitor progressMonitor = zipFile.getProgressMonitor();

        while (progressMonitor.getState() == ProgressMonitor.STATE_BUSY) {
            // To get the percentage done
            if (onChange != progressMonitor.getPercentDone()) {
                onChange = progressMonitor.getPercentDone();
                sendWebStatusUiMessage( "Extracted : " + onChange + "% ", "update" );
            }
            try {
                Thread.sleep( 1000 );
            } catch (Exception e) {

            }


        }
    } catch (ZipException e) {
        e.printStackTrace();
    }

}
java android zip aes zip4j
1个回答
0
投票

这个答案有点晚,但以防万一,可能对大家有用。

当在线程模式下运行zip4j时,你必须在while循环后检查任务的执行状态和异常(如果出错)。

while (progressMonitor.getState() == ProgressMonitor.STATE_BUSY) {
    // To get the percentage done
    if (onChange != progressMonitor.getPercentDone()) {
        onChange = progressMonitor.getPercentDone();
        sendWebStatusUiMessage( "Extracted : " + onChange + "% ", "update" );
    }
    try {
        Thread.sleep( 1000 );
    } catch (Exception e) {

    }
}

if (progressMonitor.getResult().equals(ProgressMonitor.Result.SUCCESS)) {
  System.out.println("Successfully added folder to zip");
} else if (progressMonitor.getResult().equals(ProgressMonitor.Result.ERROR)) {
  System.out.println("Error occurred. Error message: " + progressMonitor.getException().getMessage());
} else if (progressMonitor.getResult().equals(ProgressMonitor.Result.CANCELLED)) {
  System.out.println("Task cancelled");
}
© www.soinside.com 2019 - 2024. All rights reserved.