import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.List;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;
import com.xbrc.common.misc.OperationException;
import com.xbrc.common.misc.OperationException.ExceptionType;
/**
* 打包指定文件列表为zip
*
* @param files
* @param strZipFileFullPath
* @throws Exception
*/
public static void zipFiles(String strZipFileFullPath, Listfiles) {
try {
File file = new File(strZipFileFullPath);
if (!file.exists()) {
file.createNewFile();
}
FileOutputStream fous = new FileOutputStream(file);
ZipOutputStream zipOut = new ZipOutputStream(fous);
zipFile(files, zipOut);
zipOut.close();
fous.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 解压
*
* @param directory
* 解压完保存的路径
* @param zip
* 压缩包文件
*/
public static void unZipFile(String directory, File zip) {
try {
int count = -1;
int buffer = 2048;
File file = null;
InputStream is = null;
FileOutputStream fos = null;
BufferedOutputStream bos = null;
ZipFile zipFile = new ZipFile(zip, "GBK");
Enumeration en = zipFile.getEntries();
createFolder(directory);
while (en.hasMoreElements()) {
byte buf[] = new byte[buffer];
ZipEntry entry = (ZipEntry) en.nextElement();
String fileName = entry.getName();
String filePath = directory +"/"+ fileName;
if(entry.isDirectory()){
createFolder(filePath);
}else{
file = new File(filePath);
file.createNewFile();
is = zipFile.getInputStream(entry);
fos = new FileOutputStream(file);
bos = new BufferedOutputStream(fos, buffer);
while ((count = is.read(buf)) > -1) {
bos.write(buf, 0, count);
}
bos.close();
fos.close();
is.close();
}
}
zipFile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
private static void createFolder(String path) {
try {
File uploadFilePath = new File(path);
if (uploadFilePath.exists() == false) {
uploadFilePath.mkdirs();
}
} catch (Exception ex) {
throw new OperationException(ExceptionType.ERROR, "创建文件夹异常");
}
}