/******************************************************************************* * * Copyright 2011-2014 Spiffy UI Team * * Licensed 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 org.spiffyui.build; 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.List; import java.util.zip.GZIPOutputStream; /** * This is a utility for GZIPing lists of files */ public final class GzipListUtil { private GzipListUtil() { /* Our constructor is private */ } /** * <p> * GZIP the specified list of files. * </p><p> * <p> * Many web servers will send GZIP versions of static files to browsers which support it. * This method will GZIP lists of files so they can be served to those browsers. * </p> * * @param files the files to GZIP. Each file is GZIPed separately with the same file name * and a .gz extension. * @param destinationDir * the destination directory to write the list of zipped files * * @throws IOException * if there is a problem creating the zip files */ public static void zipFileList(List<File> files, File destinationDir) throws IOException { for (File source : files) { File dest = new File(destinationDir, source.getName() + ".gz"); zipFile(source, dest); } } private static void zipFile(File source, File dest) throws IOException { FileInputStream in = new FileInputStream(source); BufferedInputStream in2 = new BufferedInputStream(in); FileOutputStream out = new FileOutputStream(dest); GZIPOutputStream zipOut = new GZIPOutputStream(out); BufferedOutputStream out2 = new BufferedOutputStream(zipOut); try { int chunk; while ((chunk = in2.read()) != -1) { out2.write(chunk); } } finally { if (out2 != null) { out2.close(); } if (zipOut != null) { out2.close(); } if (out != null) { out.close(); } } } }