/**
* 压缩文件或目录到指定ZipOutputStream
* @param srcFile 指定文件或者目录
* @param zipOut 指定ZipOutputStream输出流
* @param ns 文件组织到ZIP文件时的路径
* @throws IOException
*/
private static void doZipFile(File srcFile, ZipOutputStream zipOut,
String ns) throws IOException {
if (srcFile.isFile()) {
zipOut.putNextEntry(new ZipEntry(ns + srcFile.getName()));
InputStream is = FileUtils.openInputStream(srcFile);
try {
IOUtils.copy(is, zipOut);
} catch (Exception e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(is);
}
return;
}
for (File file : srcFile.listFiles()) {
String entryName = ns + file.getName();
if (file.isDirectory()) {
entryName += File.separator;
zipOut.putNextEntry(new ZipEntry(entryName));
}
doZipFile(file, zipOut, entryName);
}
}
/**
* 将指定的压缩文件解压到指定的目标目录下.
* 如果指定的目标目录不存在或其父路径不存在, 将会自动创建.
*
* @param zipFile 将会解压的压缩文件
* @param destFile 解压操作的目录
*/
public static void unzipFile(String zipFile,String destFile) throws IOException {
unzipFile(new File(zipFile), new File(destFile));
}
/**
* 将指定的压缩文件解压到指定的目标目录下.
* 如果指定的目标目录不存在或其父路径不存在, 将会自动创建.
*
* @param zipFile 将会解压的压缩文件
* @param destFile 解压操作的目录目录
*/
public static void unzipFile(File zipFile,File destFile) throws IOException {
unzipFile(FileUtils.openInputStream(zipFile), destFile);
// doUnzipFile(new ZipFile(zipFile), destFile);
}
public static void doUnzipFile(ZipFile zipFile,File dest) throws IOException {
if (!dest.exists()) {
FileUtils.forceMkdir(dest);
}
Enumeration<ZipEntry> entries = (Enumeration<ZipEntry>) zipFile.entries();
while (entries.hasMoreElements()) {
ZipEntry entry = entries.nextElement();
File file = new File(dest, entry.getName());
if (entry.getName().endsWith(File.separator)) {
FileUtils.forceMkdir(file);
} else {
OutputStream out = FileUtils.openOutputStream(file);
InputStream in = zipFile.getInputStream(entry);
try {
IOUtils.copy(in, out);
} catch (Exception e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(out);
}
}
}
zipFile.close();
}
/**
* 将指定的输入流解压到指定的目标目录下.
*
* @param is 将要解压的输入流
* @param destFile 解压操作的目标目录
* @throws IOException
*/
public static void unzipFile(InputStream is,File destFile) throws IOException {
try {
if (is instanceof ZipInputStream) {
doUnzipFile((ZipInputStream) is,destFile);
} else {
doUnzipFile(new ZipInputStream(is), destFile);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(is);
}
}
/**
*
* @param zipInput
* @param dest
* @throws IOException
*/
private static void doUnzipFile(ZipInputStream zipInput, File dest)
throws IOException {
if (!dest.exists()) {
FileUtils.forceMkdir(dest);
}
for (ZipEntry entry; (entry = zipInput.getNextEntry()) != null;) {
String entryName = entry.getName();