监控 Zip4J extractAll() 方法进度监控

Posted

技术标签:

【中文标题】监控 Zip4J extractAll() 方法进度监控【英文标题】:Monitoring Zip4J extractAll() method progress monitor 【发布时间】:2019-09-30 05:35:38 【问题描述】:

我正在使用 Zip4J 来提取 zip 文件,我能够做到。但是,我想使用 Zip4J 中提供的进度监视器,但无法成功使用它。 文档只说它应该在线程模式下运行。我做到了,我的控制台卡在命令行上。任何带有进度监视器的 extractAll() 工作示例。

public String unzipFile(String sourceFilePath, String extractionPath) 
        String extractionDirectory = "";
        FileHeader fileHeader = null;
        if (FileUtility.isPathExist(sourceFilePath) && FileUtility.isPathExist(extractionPath)) 
            try 
                ZipFile zipFile = new ZipFile(sourceFilePath);
                LOG.info("File Extraction started");
                List<FileHeader> fileHeaderList = zipFile.getFileHeaders();
                if (fileHeaderList.size() > 0)
                    fileHeader = (FileHeader) fileHeaderList.get(0);
                if (fileHeader != null)
                    extractionDirectory = splitFileName(fileHeader.getFileName());
                long totalPercentage = 235;
                long startTime = System.currentTimeMillis();
                zipFile.extractAll(extractionPath);
                LOG.info("File Extraction completed.");
                System.out.println();
             catch (ZipException e) 
                LOG.error("Extraction Exception ->\n" + e.getMessage());
            
         else 
            LOG.error("Either source path or extraction path is not exist.");
        
        return extractionDirectory;
    

【问题讨论】:

【参考方案1】:

不知道,如果你添加足够多的文件,工作正常,实际上有一个进展可以看到。为此,我添加了一些非常胖的。

@Test
public void testExtractAllDeflateAndNoEncryptionExtractsSuccessfully() throws IOException 
    ZipFile zipFile = new ZipFile(generatedZipFile);

     List<File> toAdd = Arrays.asList(
            getTestFileFromResources("sample_text1.txt"),
            getTestFileFromResources("sample_text_large.txt"),
            getTestFileFromResources("OrccTutorial.pdf"),
             getTestFileFromResources("introduction-to-automata-theory.pdf"),
             getTestFileFromResources("thomas.pdf")
    );
    zipFile.addFiles(toAdd);

    zipFile.setRunInThread(true);

    zipFile.extractAll(outputFolder.getPath());

    ProgressMonitor mon = zipFile.getProgressMonitor();
    while (mon.getState() == BUSY) 
        System.out.println(zipFile.getProgressMonitor().getPercentDone());
        try 
            Thread.sleep(10);
         catch (InterruptedException e) 
            throw new RuntimeException(e);
        
    
    ZipFileVerifier.verifyFolderContentsSameAsSourceFiles(outputFolder);
    verifyNumberOfFilesInOutputFolder(outputFolder, 5);

【讨论】:

感谢您的回复。是的,这对我有用。但是,这在任务完成后默认不会从 Thread 中出来。当我在 Eclipse 中运行控制台时,控制台显示,程序仍在运行。从线程完成任务后如何中止? 我建议你调试一下。我也必须这样做,请参阅eclipse.org/community/eclipse_newsletter/2017/june/article1.php 我添加了图片。当我通过制作一个可运行的 jar 来运行 java -jar 时,我在控制台上遇到了堆异常。那么这是否意味着 Thread 正在内部运行并使系统保持忙碌状态?如图所示,完成作业后如何停止线程。 对不起,我不知道。可能是任何东西,由您的代码引起或隐藏在组件中。此外,我的草图也不是为了生产保存。【参考方案2】:

testAddFilesWithProgressMonitor.java在项目的测试用例中展示了如何使用ProgressMonitor。

【讨论】:

我无法获得任何将其用于 extractAll() 并显示提取进度的示例。您能否提供任何此类示例或 sn-p 代码。我试图跟随,但目前无法跟随。

以上是关于监控 Zip4J extractAll() 方法进度监控的主要内容,如果未能解决你的问题,请参考以下文章

Pandas extractall() - 返回列表,而不是多级索引?

Zip4J最简单用法

zip4j加密压缩解压缩文件文件夹

zip4j之加压解压

zip4j setFileNameCharset 不起作用

Zip4j开源jar包的简单使用