Java tutorial
/* * ==================================================================== * Copyright (c) 2005-2012 sventon project. All rights reserved. * * This software is licensed as described in the file LICENSE, which * you should have received as part of this distribution. The terms * are also available at http://www.sventon.org. * If newer versions of this license are posted there, you may use a * newer version instead, at your option. * ==================================================================== */ package org.sventon.model; import de.schlichtherle.io.ArchiveDetector; import de.schlichtherle.io.DefaultArchiveDetector; import de.schlichtherle.io.archive.spi.ArchiveDriver; import de.schlichtherle.io.archive.zip.Zip32Driver; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.Validate; import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.nio.charset.Charset; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; /** * A compressed ZIP file. * <p/> * Uses the <a href="https://truezip.dev.java.net/">TrueZip</a> library. * * @author jesper@sventon.org */ public final class ZipFileWrapper { private File zipFile; private byte[] zippedData; /** * Constructor. * * @param zipFile Destination ZIP file. * @param charset Charset to use for file names and comments. */ public ZipFileWrapper(final File zipFile, final Charset charset) { Validate.notNull(charset, "Charset was null"); Validate.notNull(zipFile, "ZipFile was null"); this.zipFile = zipFile; final ArchiveDriver driver = new Zip32Driver(charset.name()); de.schlichtherle.io.File .setDefaultArchiveDetector(new DefaultArchiveDetector(ArchiveDetector.DEFAULT, "zip", driver)); } /** * Constructor. * * @param zippedData The zipped data. */ public ZipFileWrapper(final byte[] zippedData) { this.zippedData = zippedData; } /** * Zips the given directory recursively. * * @param directory The directory to zip. * @throws java.io.IOException if IO error occurs. */ public void add(final File directory) throws IOException { synchronized (ZipFileWrapper.class) { final de.schlichtherle.io.File destinationFile = new de.schlichtherle.io.File(zipFile); final de.schlichtherle.io.File dirToZip = new de.schlichtherle.io.File(directory); destinationFile.archiveCopyAllFrom(dirToZip, ArchiveDetector.NULL); de.schlichtherle.io.File.umount(); } } /** * Extracts given file from a zipped input stream. * * @param filename Filename to extract * @return The extracted file. * @throws IOException if unable to extract file. */ public byte[] extractFile(final String filename) throws IOException { final ZipInputStream zipInputStream = new ZipInputStream(new ByteArrayInputStream(zippedData)); byte[] extractedFile = null; ZipEntry zipEntry; while ((zipEntry = zipInputStream.getNextEntry()) != null) { if (zipEntry.getName().equals(filename)) { extractedFile = IOUtils.toByteArray(zipInputStream); break; } } IOUtils.closeQuietly(zipInputStream); return extractedFile; } /** * Gets the ZIP file. * * @return ZIP file. */ public File getZipFile() { return zipFile; } }