使用Apache的 ant.jar包进行解压缩
依赖于Apache的ant.jar包
package com.chinaoly.job.utils;
import java.io.*;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import org.apache.commons.io.FilenameUtils;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;
public class ZipUtils {
private ZipUtils(){
}
public static void doCompress(String srcFile, String zipFile) throws IOException {
doCompress(new File(srcFile), new File(zipFile));
}
/**
* 文件压缩
* @param srcFile 目录或者单个文件
* @param zipFile 压缩后的ZIP文件
*/
public static void doCompress(File srcFile, File zipFile) throws IOException {
ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipFile));
try {
doCompressDir(srcFile, out);
} catch (IOException e) {
throw e;
} finally {
out.close();//记得关闭资源
}
}
public static void doCompressDir(File dirFile, ZipOutputStream out) throws IOException {
if( dirFile.isDirectory() ){
File[] files = dirFile.listFiles();
for(File file : files){
doCompressDir(file, out);
}
}else {
doCompress(dirFile, out);
}
}
public static void doCompress(String pathname, ZipOutputStream out) throws IOException{
doCompress(new File(pathname), out);
}
/**
* 压缩单个文件
* @param file
* @param out
* @throws IOException
*/
public static void doCompress(File file, ZipOutputStream out) throws IOException{
byte[] buffer = new byte[1024];
FileInputStream fis = new FileInputStream(file);
out.putNextEntry(new ZipEntry(file.getName()));
int len = 0 ;
// 读取文件的内容, 打包到zip文件
while ((len = fis.read(buffer)) > 0) {
out.write(buffer, 0, len);
out.flush();
}
out.closeEntry();
fis.close();
}
// 以下是解压zip文件
private static void createDirectory(String directory, String subDirectory) {
String dir[];
File fl = new File(directory);
try {
if (subDirectory == "" && fl.exists() != true)
fl.mkdir();
else if (subDirectory != "") {
dir = subDirectory.replace('\\', '/').split("/");
for (int i = 0; i < dir.length; i++) {
File subFile = new File(directory + File.separator + dir[i]);
if (subFile.exists() == false)
subFile.mkdir();
directory += File.separator + dir[i];
}
}
}
catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
public static void unZip(String zipFileName, String outputDirectory) throws Exception {
try {
ZipFile zipFile = new ZipFile(zipFileName);
Enumeration e = zipFile.getEntries();
ZipEntry zipEntry = null;
createDirectory(outputDirectory, "");
while (e.hasMoreElements()) {
zipEntry = (ZipEntry) e.nextElement();
if (zipEntry.isDirectory()) {
//String name = zipEntry.getName();
//name = name.substring(0, name.length() - 1);
//File f = new File(outputDirectory + File.separator + name);
//f.mkdir();
//System.out.println("创建目录:" + outputDirectory + File.separator + name);
}
else {
String fileName = zipEntry.getName();
fileName = fileName.replace('\\', '/');
if (fileName.indexOf("/") != -1)
{
/* createDirectory(outputDirectory,
fileName.substring(0, fileName.lastIndexOf("/")));*/
fileName=fileName.substring(fileName.lastIndexOf("/")+1,fileName.length());
}
//File f = new File(outputDirectory + File.separator + zipEntry.getName());
File f = new File(outputDirectory + File.separator + fileName);
f.createNewFile();
InputStream in = zipFile.getInputStream(zipEntry);
FileOutputStream out=new FileOutputStream(f);
byte[] by = new byte[1024];
int c;
while ( (c = in.read(by)) != -1) {
out.write(by, 0, c);
}
out.close();
in.close();
}
}
}
catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
}

浙公网安备 33010602011771号