在java中提取ZIP

时间:2016-09-24 07:31:27

标签: java servlets zip4j

民间,

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

  1. 我习惯用zip压缩整个目录来制作zip,它包含文件和嵌套目录,使用

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

  2. 使用

    提取zip
    ZipFile zipFile = new ZipFile(stringArchievedFile);
    //Extracts all files to the path specified
    zipFile.extractAll(stringExtractingFilePath);
    
  3. 问题出在提取之后,文件应该被提取到我用zipFile.extractAll(path)方法提供的路径,但是还创建了一个目录。如何将文件解压缩到实际指定的目录

    像: 提取路径 C:\ ExtractionPath

    文件路径 C:\ SelectingPath \ File1

    C:\ SelectingPath \文件2

    C:\ SelectingPath \ directory1中\ File1中

    C:\ SelectingPath \ Directory2 \ File1中

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

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

    提取后

    所有提取的文件都将进入

    ** C:\ ExtractionPath \ SelectingPath **

    我需要

    目录中的所有文件

    ** C:\ ExtractionPath **  本身。

    请帮我解决这个问题。

    提前致谢

2 个答案:

答案 0 :(得分:1)

您是否尝试过这样的Zip4j site示例:

/*
* 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();
    }

}

答案 1 :(得分:1)

感谢Andreas& esprittn !!

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

遵循 ARCHIVE 代码流程:

addFiles(ArrayList, ZipParameters)

并且 EXTRACTION

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);
        }
    }