Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

//package com.java2s;
/**
 * 
 * For information on usage and redistribution, and for a DISCLAIMER OF ALL WARRANTIES, see the
 * file, "LICENSE.txt," in this distribution.
 * 
 */

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class Main {
    /**
     * Extract a zip resource into real files and directories, not overwriting existing files
     * 
     * @param in typically given as getResources().openRawResource(R.raw.something)
     * @param directory target directory
     * @return list of files that were unpacked, not including files that existed before
     * @throws IOException
     */
    public static List<File> extractZipResource(InputStream in, File directory) throws IOException {
        return extractZipResource(in, directory, false);
    }

    /**
     * Extract a zip resource into real files and directories
     * 
     * @param in typically given as getResources().openRawResource(R.raw.something)
     * @param directory target directory
     * @param overwrite indicates whether to overwrite existing files
     * @return list of files that were unpacked (if overwrite is false, this list won't include files
     *         that existed before)
     * @throws IOException
     */
    public static List<File> extractZipResource(InputStream in, File directory, boolean overwrite)
            throws IOException {
        final int BUFSIZE = 2048;
        byte buffer[] = new byte[BUFSIZE];
        ZipInputStream zin = new ZipInputStream(new BufferedInputStream(in, BUFSIZE));
        List<File> files = new ArrayList<File>();
        ZipEntry entry;
        directory.mkdirs();
        while ((entry = zin.getNextEntry()) != null) {
            File file = new File(directory, entry.getName());
            files.add(file);
            if (overwrite || !file.exists()) {
                if (entry.isDirectory()) {
                    file.mkdirs();
                } else {
                    file.getParentFile().mkdirs(); // Necessary because some zip files lack directory entries.
                    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file), BUFSIZE);
                    int nRead;
                    while ((nRead = zin.read(buffer, 0, BUFSIZE)) > 0) {
                        bos.write(buffer, 0, nRead);
                    }
                    bos.flush();
                    bos.close();
                }
            }
        }
        zin.close();
        return files;
    }
}