Java Zip File List zip(Iterable files, String baseFolderName, String toZipFile)

Here you can find the source of zip(Iterable files, String baseFolderName, String toZipFile)

Description

Zips the specified files, including directories and nested directories into the specified zip file.

License

CDDL license

Parameter

Parameter Description
files the File s (including directories) to zip
baseFolderName the folder that will be created when unzipping the zip file
toZipFile the zip file (that will be created)

Exception

Parameter Description
IOExceptionwhen the files can't be zipped for some reason

Declaration

public static void zip(Iterable<File> files, String baseFolderName,
        String toZipFile) throws IOException 

Method Source Code

//package com.java2s;
/*//from   ww w  .j a  v a 2  s . c  o  m
 * File: FileHelper.java
 *
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * The contents of this file are subject to the terms and conditions of 
 * the Common Development and Distribution License 1.0 (the "License").
 *
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the License by consulting the LICENSE.txt file
 * distributed with this file, or by consulting https://oss.oracle.com/licenses/CDDL
 *
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing the software, include this License Header Notice in each
 * file and include the License file LICENSE.txt.
 *
 * MODIFICATIONS:
 * If applicable, add the following below the License Header, with the fields
 * enclosed by brackets [] replaced by your own identifying information:
 * "Portions Copyright [year] [name of copyright owner]"
 */

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class Main {
    /**
     * Zips the specified files, including directories and nested directories into the specified zip file.
     *
     * @param files           the {@link File}s (including directories) to zip
     * @param baseFolderName  the folder that will be created when unzipping the zip file
     * @param toZipFile       the zip file (that will be created)
     *
     * @throws IOException  when the files can't be zipped for some reason
     */
    public static void zip(Iterable<File> files, String baseFolderName,
            String toZipFile) throws IOException {
        ZipOutputStream zip = new ZipOutputStream(new FileOutputStream(
                toZipFile));

        if (files != null) {
            for (File file : files) {
                if (file.exists()) {
                    if (file.isDirectory()) {
                        addFolderToZip(file, baseFolderName, zip);
                    } else {
                        addFileToZip(file, baseFolderName, zip);
                    }
                }
            }
        }

        zip.flush();
        zip.close();
    }

    /**
     * Recursively adds the contents of the specified {@link File} representing a folder to the
     * specified {@link ZipOutputStream}.
     *
     * @param folder            a {@link File} representing a folder to add
     * @param parentFolderName  the parent folder of the {@link File}
     * @param zip               the {@link ZipOutputStream} to which to write the {@link File}
     *
     * @throws IOException  should any problems occur
     */
    private static void addFolderToZip(File folder,
            String parentFolderName, ZipOutputStream zip)
            throws IOException {
        String parent = parentFolderName == null
                || parentFolderName.trim().isEmpty() ? ""
                : parentFolderName.trim() + "/";

        if (folder.exists()) {
            File[] files = folder.listFiles();

            if (files != null) {
                for (File file : files) {
                    if (file.isDirectory()) {
                        addFolderToZip(file, parent + file.getName(), zip);
                    } else {
                        addFileToZip(file, parentFolderName, zip);
                    }
                }
            }
        }
    }

    /**
     * Adds a specified {@link File} (that is not a folder) to the specified
     * {@link ZipOutputStream}, the {@link File} being located in the specified parent
     * folder.
     *
     * @param file              a file representing the {@link File} to add
     * @param parentFolderName  the parent folder of the {@link File}
     * @param zip               the {@link ZipOutputStream} to which to write the {@link File}
     *
     * @throws IOException  should any problems occur
     */
    private static void addFileToZip(File file, String parentFolderName,
            ZipOutputStream zip) throws IOException {
        String parent = parentFolderName == null
                || parentFolderName.trim().isEmpty() ? ""
                : parentFolderName.trim() + "/";

        if (file.exists()) {
            zip.putNextEntry(new ZipEntry(parent + file.getName()));

            BufferedInputStream inputStream = new BufferedInputStream(
                    new FileInputStream(file));
            byte[] buffer = new byte[16096];
            int count = 0;

            while ((count = inputStream.read(buffer)) != -1) {
                zip.write(buffer, 0, count);
            }

            zip.closeEntry();
        }
    }
}

Related

  1. zip(Collection files, File zipFile)
  2. zip(File zipFile, File parentDir, File[] sources, char pathSeparator)
  3. zip(File zipFile, File[] files)
  4. zip(File zipFile, File[] files)
  5. zip(File zipFile, List files)
  6. zip(List runtimeLibFiles, File saturnContainerDir, File zipFile)
  7. zip(List fileNames, List fileContents)
  8. zip(List fileNames, String outFileName)
  9. zip(List srcFiles, OutputStream os)