Package org.jdna.minecraft.tools

Source Code of org.jdna.minecraft.tools.Util

package org.jdna.minecraft.tools;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Collection;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.io.filefilter.TrueFileFilter;

public class Util {
  public static String relativePath(String src, String dest) {
    String sp = src;
    String dp = dest;
    if (dp.startsWith(sp)) {
      dp = dp.substring(sp.length());
      if (dp.startsWith(File.separator))
        dp = dp.substring(1);
    }
    return dp;
  }

  public static String relativePath(File src, File dest) {
    String sp = src.getAbsolutePath();
    String dp = dest.getAbsolutePath();
    return relativePath(sp, dp);
  }

  public static void unzip(File sourceZipFile, File unzipDestinationDirectory) throws IOException {
    unzip(sourceZipFile, unzipDestinationDirectory, null);
  }

  public static void unzip(File sourceZipFile, File unzipDestinationDirectory, FileFilter filter) throws IOException {
    unzipDestinationDirectory.mkdirs();
    if (!unzipDestinationDirectory.exists()) {
      throw new IOException("Unable to create destination directory: "
          + unzipDestinationDirectory);
    }

    ZipFile zipFile;
    // Open Zip file for reading
    zipFile = new ZipFile(sourceZipFile, ZipFile.OPEN_READ);

    // Create an enumeration of the entries in the zip file
    Enumeration<? extends ZipEntry> zipFileEntries = zipFile.entries();

    // Process each entry
    while (zipFileEntries.hasMoreElements()) {
      // grab a zip file entry
      ZipEntry entry = (ZipEntry) zipFileEntries.nextElement();

      // extract file if not a directory
      if (!entry.isDirectory()) {
        String currentEntry = entry.getName();
        File destFile = new File(unzipDestinationDirectory,  currentEntry);
       
        if (filter==null || filter.accept(destFile)) {
          File destinationParent = destFile.getParentFile();
          destinationParent.mkdirs();
 
          BufferedInputStream is = new BufferedInputStream(
              zipFile.getInputStream(entry));
          FileOutputStream fos = new FileOutputStream(destFile);
          IOUtils.copyLarge(is, fos);
          fos.flush();
          IOUtils.closeQuietly(fos);
        }
      }
    }
    zipFile.close();
  }

  public static void zip(File srcDir, File destFile, FileFilter filter) throws IOException {
    ZipOutputStream out = null;
    try {
      out = new ZipOutputStream(new FileOutputStream(destFile));
      Collection<File> files = FileUtils.listFiles(srcDir, TrueFileFilter.TRUE, TrueFileFilter.TRUE);
      for (File f: files) {
        if (filter==null || filter.accept(f)) {
          FileInputStream in = FileUtils.openInputStream(f);
 
          // Add ZIP entry to output stream.
          out.putNextEntry(new ZipEntry(Util.relativePath(srcDir, f).replace('\\', '/')));
 
          // Transfer bytes from the file to the ZIP file
          IOUtils.copyLarge(in, out);
         
          // Complete the entry
          out.closeEntry();
          IOUtils.closeQuietly(in);
        }
      }

      // Complete the ZIP file
      IOUtils.closeQuietly(out);
    } catch (Throwable t) {
      throw new IOException("Failed to create zip file", t);
    } finally {
      if (out != null) {
        out.flush();
        IOUtils.closeQuietly(out);
      }
    }
  }

  public static void zip(File srcDir, File destFile) throws IOException {
    zip(srcDir, destFile, null);
  }
}
TOP

Related Classes of org.jdna.minecraft.tools.Util

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.