recursive Add To Zip - Java File Path IO

Java examples for File Path IO:Zip File

Description

recursive Add To Zip

Demo Code


//package com.java2s;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

public class Main {
    public static void recursiveAddToZip(File source, File zipFile,
            String pathInZip) throws IOException {
        recursiveAddToZip(new File[] { source }, zipFile, pathInZip);
    }//from   w  w w  .j  a v a  2 s. co  m

    public static void recursiveAddToZip(File[] files, File zipFile,
            String pathInZip) throws IOException {
        FileOutputStream fOut = null;
        ZipOutputStream zipOut = null;

        try {
            fOut = new FileOutputStream(zipFile);
            zipOut = new ZipOutputStream(fOut);

            for (File f : files) {
                recursiveAddToZip(f, zipOut, pathInZip);
            }
        } finally {
            if (zipOut != null)
                zipOut.close();
            else if (fOut != null)
                fOut.close();
        }
    }

    private static void recursiveAddToZip(File source,
            ZipOutputStream zipOut, String pathInZip) throws IOException {
        if (source.isDirectory()) {
            if (pathInZip.equals(""))
                pathInZip = source.getName();
            else
                pathInZip = pathInZip + "/" + source.getName();
            //         System.out.println("Recursing into " + source + " with path " + pathInZip);
            // Recurse
            for (File f : source.listFiles()) {
                recursiveAddToZip(f, zipOut, pathInZip);
            }
        } else if (source.isFile()) {
            //         System.out.println("Adding " + source.toString() + " to " + 
            //               zipFile.toString());
            addToZip(zipOut, source, pathInZip);
        }
    }

    public static void addToZip(File zipFile, File source, String pathInZip)
            throws IOException {
        addToZip(zipFile, new File[] { source }, pathInZip);
    }

    /**
     * Adds the given file to the given zip file.
     * @param zipFile the zip file to add to
     * @param files file to add
     */
    public static void addToZip(File zipFile, File[] files, String pathInZip)
            throws IOException {
        FileOutputStream fOut = null;
        ZipOutputStream zipOut = null;

        try {
            fOut = new FileOutputStream(zipFile);
            zipOut = new ZipOutputStream(fOut);

            for (File f : files) {
                addToZip(zipOut, f, pathInZip);
            }
        } finally {
            if (zipOut != null)
                zipOut.close();
            else if (fOut != null)
                fOut.close();
        }
    }

    private static void addToZip(ZipOutputStream zipOut, File source,
            String pathInZip) throws IOException {
        BufferedOutputStream out = null;

        FileInputStream fIn = null;
        BufferedInputStream in = null;

        final int bufSize = 512;
        try {
            // Open our streams
            fIn = new FileInputStream(source);
            in = new BufferedInputStream(fIn, bufSize);

            String filePathInZip = pathInZip + "/" + source.getName();
            if (pathInZip.equals(""))
                filePathInZip = source.getName();

            //         System.out.println("Adding " + filePathInZip);
            ZipEntry entry = new ZipEntry(filePathInZip);
            zipOut.putNextEntry(entry);

            out = new BufferedOutputStream(zipOut, bufSize);

            int count = 0;
            byte[] buffer = new byte[bufSize];
            while ((count = in.read(buffer, 0, buffer.length)) > -1) {
                out.write(buffer, 0, count);
            }
            out.flush();
            zipOut.closeEntry();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            if (in != null)
                in.close();
            else if (fIn != null)
                fIn.close();
        }
    }
}

Related Tutorials