Android Zip Unzip Directory zipFileAtPath(final String sourcePath, final String toLocation)

Here you can find the source of zipFileAtPath(final String sourcePath, final String toLocation)

Description

Zips a file at a location and places the resulting zip file at the toLocation Example: zipFileAtPath("downloads/myfolder", "downloads/myFolder.zip");

Declaration

public static boolean zipFileAtPath(final String sourcePath,
        final String toLocation) 

Method Source Code

//package com.java2s;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
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;

import android.util.Log;

public class Main {
    /**// w  w  w.j  ava  2s  .c  o m
     * 
     * Zips a file at a location and places the resulting zip file at the
     * toLocation Example: zipFileAtPath("downloads/myfolder",
     * "downloads/myFolder.zip");
     */
    public static boolean zipFileAtPath(final String sourcePath,
            final String toLocation) {
        // ArrayList<String> contentList = new ArrayList<String>();
        final int BUFFER = 2048;

        final File sourceFile = new File(sourcePath);
        try {
            BufferedInputStream origin = null;
            final FileOutputStream dest = new FileOutputStream(toLocation);
            final ZipOutputStream out = new ZipOutputStream(
                    new BufferedOutputStream(dest));
            if (sourceFile.isDirectory()) {
                zipSubFolder(out, sourceFile, sourceFile.getParent()
                        .length());
            } else {
                final byte data[] = new byte[BUFFER];
                final FileInputStream fi = new FileInputStream(sourcePath);
                origin = new BufferedInputStream(fi, BUFFER);
                final ZipEntry entry = new ZipEntry(
                        getLastPathComponent(sourcePath));
                out.putNextEntry(entry);
                int count;
                while ((count = origin.read(data, 0, BUFFER)) != -1) {
                    out.write(data, 0, count);
                }
            }
            out.close();
        } catch (final Exception e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }

    private static void zipSubFolder(final ZipOutputStream out,
            final File folder, final int basePathLength) throws IOException {

        final int BUFFER = 2048;

        final File[] fileList = folder.listFiles();
        BufferedInputStream origin = null;
        for (final File file : fileList) {
            if (file.isDirectory()) {
                zipSubFolder(out, file, basePathLength);
            } else {
                final byte data[] = new byte[BUFFER];
                final String unmodifiedFilePath = file.getPath();
                final String relativePath = unmodifiedFilePath
                        .substring(basePathLength);
                Log.i("ZIP SUBFOLDER", "Relative Path : " + relativePath);
                final FileInputStream fi = new FileInputStream(
                        unmodifiedFilePath);
                origin = new BufferedInputStream(fi, BUFFER);
                final ZipEntry entry = new ZipEntry(relativePath);
                out.putNextEntry(entry);
                int count;
                while ((count = origin.read(data, 0, BUFFER)) != -1) {
                    out.write(data, 0, count);
                }
                origin.close();
            }
        }
    }

    private static String getLastPathComponent(final String filePath) {
        final String[] segments = filePath.split("/");
        final String lastPathComponent = segments[segments.length - 1];
        return lastPathComponent;
    }
}

Related

  1. zipSubFolder(ZipOutputStream out, File folder, int basePathLength)
  2. zipSubFolder(ZipOutputStream out, File folder, int basePathLength)
  3. zipSubFolder(final ZipOutputStream out, final File folder, final int basePathLength)
  4. zipFileAtPath(String[] sourcePaths, String toLocation)
  5. zipFileAtPath(String[] sourcePaths, String toLocation)
  6. zipDirectory(File directory, File zip)
  7. zipDirectory(File directory, File zip)
  8. zipDirectory(File folder, String parentFolder, ZipOutputStream zos)
  9. compress(String filePath, int width, int height)