0

伙计们,

我正在使用zip4j API 在 java 中提取 .zip 文件并能够提取文件

  1. 我曾经使用压缩完整的目录来制作 zip,它包含文件和嵌套目录,使用

    zipFile.addFolder(fileDirectory, parameters);//ZIP目录文件/文件夹

  2. 使用提取zip

    ZipFile zipFile = new ZipFile(stringArchievedFile);
    //Extracts all files to the path specified
    zipFile.extractAll(stringExtractingFilePath);
    

问题是在解压之后,文件应该被解压到我用zipFile.extractAll(path)方法提供的路径,但是又创建了一个目录。如何将文件提取到实际指定的目录

喜欢: 提取路径 C:\ExtractionPath

文件路径 C:\SelectingPath\File1

C:\SelectingPath\File2

C:\SelectingPath\Directory1\File1

C:\SelectingPath\Directory2\File1

我将选择C:\SelectingPath目录进行压缩和

我将选择C:\ExtractionPath目录来提取文件

提取后,所有提取的文件都将进入

**C:\ExtractionPath\SelectingPath**

我需要目录中的所有文件

**C:\ExtractionPath** 本身。

请帮我解决这个问题。

提前致谢

4

2 回答 2

1

您是否尝试过Zip4j 站点中的示例, 如下所示:

/*
* Copyright 2010 Srikanth Reddy Lingala  
* 
* Licensed under the Apache License, Version 2.0 (the "License"); 
* you may not use this file except in compliance with the License. 
* You may obtain a copy of the License at 
* 
* http://www.apache.org/licenses/LICENSE-2.0 
* 
* Unless required by applicable law or agreed to in writing, 
* software distributed under the License is distributed on an "AS IS" BASIS, 
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
* See the License for the specific language governing permissions and 
* limitations under the License. 
*/

package net.lingala.zip4j.examples.extract;

import net.lingala.zip4j.core.ZipFile;
import net.lingala.zip4j.exception.ZipException;

/**
 * Demonstrates extracting all files from a zip file
 * 
 * @author Srikanth Reddy Lingala
 *
 */
public class ExtractAllFiles {

    public ExtractAllFiles() {

        try {
            // Initiate ZipFile object with the path/name of the zip file.
            ZipFile zipFile = new ZipFile("c:\\ZipTest\\ExtractAllFiles.zip");

            // Extracts all files to the path specified
            zipFile.extractAll("c:\\ZipTest");

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

    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        new ExtractAllFiles();
    }

}
于 2016-09-24T08:50:38.290 回答
1

谢谢安德烈亚斯和esprittn!

我们需要将ArrayList<File>作为参数传递给该addFiles(ArrayList, ZipParameters)方法,以便我们可以归档目录的整个目录内容。我得到了预期的输出

遵循ARCHIVE代码流:

public void archieveFiles(File fileDirectory, String stringPassword) throws Exception {
        try{

            String[] filesDirectoryList = fileDirectory.list();

            ArrayList<File> listFileDirectory = new ArrayList<>(); //To list the files to archive
            for(int iListCount = 0; iListCount < filesDirectoryList.length; iListCount++){
                listFileDirectory.add(new File(fileDirectory+"\\"+filesDirectoryList[iListCount]));
            }

            ZipFile zipFile = new ZipFile("C:\\CreateZIP\\FileArchive.zip");
            //Initiate Zip Parameters which define various properties
            ZipParameters parameters = new ZipParameters();
            // Set compression method to deflate compression
            parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); 
            parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); 
            //Set the encryption flag to true
            parameters.setEncryptFiles(true);
            //Set the encryption method to AES Zip Encryption
            parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);
            //file encrypted with key strength of 192, then Zip4j can decrypt this file
            parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);
            //Set password
            parameters.setPassword(stringPassword);
            // Zip the directory files
            zipFile.addFiles(listFileDirectory, parameters);
        }
        catch(ZipException ex){
            Logj.errorLog(ex);
        }
        catch(Exception ex){
            Logj.errorLog(ex);
        }
    }

并且提取

public void extractFilesForFirmwareZip(String stringArchievedFile, String stringExtractingFilePath, String stringFileEncrypt) throws Exception{
        try{
            // Initiate ZipFile object with the path/name of the zip file.
            ZipFile zipFile = new ZipFile(stringArchievedFile);
            //Initiate Zip Parameters which define various properties
            //UnzipParameters parameters = new UnzipParameters();
            if(zipFile.isEncrypted())
                zipFile.setPassword(stringFileEncrypt);
            //Extracts all files to the path specified
            zipFile.extractAll(stringExtractingFilePath);
        }
        catch(ZipException ex){
            isValidArchiveFile = false;
            Logj.doLog(ex.getMessage(), ex);
        }
        catch(Exception ex){
            throw ex;
        }
    }
于 2016-09-26T05:05:17.277 回答