//The contents of this file are subject to the Mozilla Public License Version 1.1
//(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.mozilla.org/MPL/
//
//Software distributed under the License is distributed on an "AS IS" basis,
//WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
//for the specific language governing rights and
//limitations under the License.
//
//The Original Code is "The Columba Project"
//
//The Initial Developers of the Original Code are Frederik Dietz and Timo Stich.
//Portions created by Frederik Dietz and Timo Stich are Copyright (C) 2003.
//
//All Rights Reserved.
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
/**
* Zip archive operations are handled by this class.
*
* @author fdietz
*/
public class ZipFileIO {
/**
* No instances needed.
*/
private ZipFileIO() {
// don't instantiate this class
}
/**
* Extract zip file to destination folder.
*
* @param file
* zip file to extract
* @param destination
* destinatin folder
*/
public static void extract(File file, File destination) throws IOException {
ZipInputStream in = null;
OutputStream out = null;
try {
// Open the ZIP file
in = new ZipInputStream(new FileInputStream(file));
// Get the first entry
ZipEntry entry = null;
while ((entry = in.getNextEntry()) != null) {
String outFilename = entry.getName();
// Open the output file
if (entry.isDirectory()) {
new File(destination, outFilename).mkdirs();
} else {
out = new FileOutputStream(new File(destination,
outFilename));
// Transfer bytes from the ZIP file to the output file
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
// Close the stream
out.close();
}
}
} finally {
// Close the stream
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
}
/**
* Return the first directory of this archive. This is needed to determine
* the plugin directory.
*
* @param zipFile
* @return File containing the first entry of this archive
*/
public static File getFirstFile(File zipFile) throws IOException {
ZipInputStream in = null;
try {
// Open the ZIP file
in = new ZipInputStream(new FileInputStream(zipFile));
// Get the first entry
ZipEntry entry = null;
while ((entry = in.getNextEntry()) != null) {
String outFilename = entry.getName();
if (entry.isDirectory()) {
return new File(outFilename);
}
}
} finally {
if (in != null) {
// Close the stream
in.close();
}
}
return null;
}
}