Java Zip Folder addFolderToZip(File folder, String parentFolderName, ZipOutputStream zip)

Here you can find the source of addFolderToZip(File folder, String parentFolderName, ZipOutputStream zip)

Description

Recursively adds the contents of the specified File representing a folder to the specified ZipOutputStream .

License

CDDL license

Parameter

Parameter Description
folder a File representing a folder to add
parentFolderName the parent folder of the File
zip the ZipOutputStream to which to write the File

Exception

Parameter Description
IOExceptionshould any problems occur

Declaration

private static void addFolderToZip(File folder,
        String parentFolderName, ZipOutputStream zip)
        throws IOException 

Method Source Code

//package com.java2s;
/*/*from w  w  w  .ja v  a  2 s .  c  om*/
 * 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.IOException;

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

public class Main {
    /**
     * 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. addFolderToZip(String folderPath, ZipOutputStream out)
  2. addFolderToZip(String path, File srcFolder, ZipOutputStream zip)
  3. addFolderToZip(String path, File srcFolder, ZipOutputStream zip, String destZipFile)
  4. addFolderToZip(String path, String srcFolder, ZipOutputStream zip)