/** *######################################################################### * * A component of the Gatherer application, part of the Greenstone digital * library suite from the New Zealand Digital Library Project at the * University of Waikato, New Zealand. * *

* * Author: David Bainbridge, NZDL Project, University of Waikato * *

* * Copyright (C) 2005 New Zealand Digital Library Project * *

* * 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 2 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, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *######################################################################## */ package org.greenstone.gatherer.remote; import java.io.*; import java.util.*; import java.util.zip.*; public class Unzip { public static final void copyInputStream(InputStream in, OutputStream out) throws IOException { byte[] buffer = new byte[1024]; int len; while((len = in.read(buffer)) >= 0) out.write(buffer, 0, len); in.close(); out.close(); } static public void main(String[] args) { if (args.length != 2) { System.err.println("Usage: Unzip "); return; } String zip_file_path = args[0]; // System.err.println("Zip file path: " + zip_file_path); String destination_directory_path = args[1]; if (!destination_directory_path.endsWith(File.separator)) { destination_directory_path += File.separator; } // System.err.println("Destination directory path: " + destination_directory_path); try { ZipFile zipFile = new ZipFile(zip_file_path); Enumeration entries = zipFile.entries(); while (entries.hasMoreElements()) { ZipEntry entry = (ZipEntry) entries.nextElement(); if (entry.isDirectory()) { // Assume directories are stored parents first then children. // System.err.println("Extracting directory: " + entry.getName()); // This is not robust, just for demonstration purposes. String dir_name = entry.getName(); String full_dir_name = destination_directory_path + dir_name; // System.err.println("Full directory name: " + full_dir_name); File dirFile = new File(full_dir_name); dirFile.mkdir(); } else { // System.err.println("Extracting file: " + entry.getName()); String file_name = entry.getName(); String full_file_name = destination_directory_path + file_name; File directory = (new File(full_file_name)).getParentFile(); // System.err.println("Full file name: " + full_file_name); if (!directory.exists() && !directory.mkdirs()) { System.err.println("Error: Could not create directory " + directory + "!"); } FileOutputStream fos = new FileOutputStream(full_file_name); BufferedOutputStream bos = new BufferedOutputStream(fos); copyInputStream(zipFile.getInputStream(entry),bos); } } zipFile.close(); } catch (Exception exception) { System.out.println("ERROR: " + exception); exception.printStackTrace(); System.exit(1); } } }