Java tutorial
/** * Copyright 2005-2014 Red Hat, Inc. * * Red Hat licenses this file to you under the Apache License, version * 2.0 (the "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.beyondj.maven; import org.apache.maven.plugin.logging.Log; import java.io.*; import java.util.Collections; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; import static com.google.common.io.Closeables.close; /** */ public class Zips { /** * Creates a zip fie from the given source directory and output zip file name */ public static void createZipFile(Log log, File sourceDir, File outputZipFile) throws IOException { outputZipFile.getParentFile().mkdirs(); OutputStream os = new FileOutputStream(outputZipFile); ZipOutputStream zos = new ZipOutputStream(os); try { //zos.setLevel(Deflater.DEFAULT_COMPRESSION); //zos.setLevel(Deflater.NO_COMPRESSION); String path = ""; FileFilter filter = null; zipDirectory(log, sourceDir, zos, path, filter); } finally { try { zos.close(); } catch (Exception e) { } } } /** * Zips the directory recursively into the ZIP stream given the starting path and optional filter */ public static void zipDirectory(Log log, File directory, ZipOutputStream zos, String path, FileFilter filter) throws IOException { // get a listing of the directory content File[] dirList = directory.listFiles(); byte[] readBuffer = new byte[8192]; int bytesIn = 0; // loop through dirList, and zip the files if (dirList != null) { for (File f : dirList) { if (f.isDirectory()) { String prefix = path + f.getName() + "/"; zos.putNextEntry(new ZipEntry(prefix)); zipDirectory(log, f, zos, prefix, filter); } else { String entry = path + f.getName(); if (filter == null || filter.accept(f)) { FileInputStream fis = new FileInputStream(f); try { ZipEntry anEntry = new ZipEntry(entry); zos.putNextEntry(anEntry); bytesIn = fis.read(readBuffer); while (bytesIn != -1) { zos.write(readBuffer, 0, bytesIn); bytesIn = fis.read(readBuffer); } } finally { fis.close(); } log.info("zipping file " + entry); } } zos.closeEntry(); } } } /** * Unzips the given input stream of a ZIP to the given directory */ public static void unzip(InputStream in, File toDir) throws IOException { ZipInputStream zis = new ZipInputStream(new BufferedInputStream(in)); try { ZipEntry entry = zis.getNextEntry(); while (entry != null) { if (!entry.isDirectory()) { String entryName = entry.getName(); File toFile = new File(toDir, entryName); toFile.getParentFile().mkdirs(); OutputStream os = new FileOutputStream(toFile); try { try { copy(zis, os); } finally { zis.closeEntry(); } } finally { close(os, true); } } entry = zis.getNextEntry(); } } finally { close(zis, true); } } static void copy(InputStream is, OutputStream os) throws IOException { try { byte[] b = new byte[4096]; int l = is.read(b); while (l >= 0) { os.write(b, 0, l); l = is.read(b); } } finally { close(os, true); } } public static List<String> notNullList(List<String> list) { if (list == null) { return Collections.EMPTY_LIST; } else { return list; } } }