de.lazyzero.kkMulticopterFlashTool.utils.Zip.java Source code

Java tutorial

Introduction

Here is the source code for de.lazyzero.kkMulticopterFlashTool.utils.Zip.java

Source

/**
 * KKMulticopterFlashTool, a avrdude GUI for flashing KK boards and other
 *   equipment.
 *   Copyright (C) 2011 Christian Moll
 *
 *   This program is free software: you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation, either version 3 of the License, or
 *   (at your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
package de.lazyzero.kkMulticopterFlashTool.utils;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;

import lu.tudor.santec.i18n.Translatrix;

import org.apache.commons.io.FileExistsException;

import de.lazyzero.kkMulticopterFlashTool.KKMulticopterFlashTool;

public class Zip {

    static KKMulticopterFlashTool kk = KKMulticopterFlashTool.getInstance();

    public static File unzipFile(File zipFile, File file) {
        System.out.println("path to zipFile: " + zipFile.getPath());
        System.out.println("file to extract: " + file.getPath());
        String fileName = null;

        try {
            zipFile.mkdir();
            BufferedOutputStream dest = null;
            BufferedInputStream is = null;
            ZipEntry entry;
            ZipFile zipfile = new ZipFile(zipFile);
            Enumeration e = zipfile.entries();
            while (e.hasMoreElements()) {
                entry = (ZipEntry) e.nextElement();
                // System.out.println(entry.getName());
                if (entry.getName().substring(entry.getName().indexOf("/") + 1).equals(file.getName())) {
                    //   if (entry.getName().contains(file.getName())){
                    System.out.println("firmware to extract found.");

                    String tempFolder = System.getProperty("user.dir") + File.separatorChar + "tmp"
                            + File.separatorChar;
                    if (System.getProperty("os.name").toLowerCase().contains("mac")) {
                        tempFolder = System.getProperty("user.home")
                                + "/Library/Preferences/kkMulticopterFlashTool/";
                    }

                    String newDir;
                    if (entry.getName().indexOf("/") == -1) {
                        newDir = zipFile.getName().substring(0, zipFile.getName().indexOf("."));
                    } else {
                        newDir = entry.getName().substring(0, entry.getName().indexOf("/"));
                    }
                    String folder = tempFolder + newDir;
                    System.out.println("Create folder: " + folder);
                    if ((new File(folder).mkdir())) {
                        System.out.println("Done.");
                        ;
                    }

                    System.out.println("Extracting: " + entry);
                    is = new BufferedInputStream(zipfile.getInputStream(entry));
                    int count;
                    byte data[] = new byte[2048];
                    fileName = tempFolder + entry.getName();
                    FileOutputStream fos = new FileOutputStream(tempFolder + entry.getName());
                    dest = new BufferedOutputStream(fos, 2048);
                    while ((count = is.read(data, 0, 2048)) != -1) {
                        dest.write(data, 0, count);
                    }
                    dest.flush();
                    dest.close();
                    is.close();
                    break;
                }
            }
        } catch (ZipException e) {
            zipFile.delete();
            kk.err(Translatrix._("error.zipfileDamaged"));
            kk.err(Translatrix._("reportProblem"));
        } catch (Exception e) {
            e.printStackTrace();
        }

        return new File(fileName);
    }

    public static void unzip2folder(File zipFile, File toFolder) throws FileExistsException {
        if (!toFolder.exists()) {
            toFolder.mkdirs();
        } else if (toFolder.isFile()) {
            throw new FileExistsException(toFolder.getName());
        }

        try {
            ZipEntry entry;
            @SuppressWarnings("resource")
            ZipFile zipfile = new ZipFile(zipFile);
            Enumeration<? extends ZipEntry> e = zipfile.entries();
            while (e.hasMoreElements()) {
                entry = e.nextElement();

                //            String newDir;
                //            if (entry.getName().indexOf("/") == -1) {
                //               newDir = zipFile.getName().substring(0, zipFile.getName().indexOf("."));
                //            } else {
                //               newDir = entry.getName().substring(0, entry.getName().indexOf("/"));
                //            }
                //            String folder = toFolder + (File.separatorChar+"") + newDir;
                //            System.out.println(folder);
                //            if ((new File(folder).mkdir())) {
                //               System.out.println("Done.");
                //            }
                System.out.println("Extracting: " + entry);
                if (entry.isDirectory()) {
                    new File(toFolder + (File.separatorChar + "") + entry.getName()).mkdir();
                } else {
                    BufferedInputStream is = new BufferedInputStream(zipfile.getInputStream(entry));
                    int count;
                    byte data[] = new byte[2048];
                    String fileName = toFolder + (File.separatorChar + "") + entry.getName();
                    FileOutputStream fos = new FileOutputStream(fileName);
                    BufferedOutputStream dest = new BufferedOutputStream(fos, 2048);
                    while ((count = is.read(data, 0, 2048)) != -1) {
                        dest.write(data, 0, count);
                    }
                    dest.flush();
                    dest.close();
                    is.close();
                    System.out.println("extracted to: " + fileName);
                }

            }
        } catch (ZipException e1) {
            zipFile.delete();
            e1.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } finally {

        }

    }

}