package com.test;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
public class TestZip
{
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/** *//**
* zip压缩功能测试. 将d:\\temp\\zipout目录下的所有文件连同子目录压缩到d:\\temp\\out.zip.
*
* @throws Exception
*/
@SuppressWarnings("unchecked")
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public void CreateZip(String zipUrl, String zipName) throws Exception
{
// 压缩baseDir下所有文件,包括子目录
String baseDir = zipUrl;
List fileList = getSubFiles(new File(baseDir));
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// 压缩文件名
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipName));
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
ZipEntry ze = null;
byte[] buf = new byte[1024];
int readLen = 0;
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
for (int i = 0; i < fileList.size(); i++)
{
File f = (File) fileList.get(i);
System.out.print("Adding: " + f.getPath() + f.getName());
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// 创建一个ZipEntry,并设置Name和其它的一些属性
ze = new ZipEntry(getAbsFileName(baseDir, f));
ze.setSize(f.length());
ze.setTime(f.lastModified());
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// 将ZipEntry加到zos中,再写入实际的文件内容
zos.putNextEntry(ze);
InputStream is = new BufferedInputStream(new FileInputStream(f));
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
while ((readLen = is.read(buf, 0, 1024)) != -1)
{
zos.write(buf, 0, readLen);
}
is.close();
System.out.println(" done
");
}
zos.close();
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/** *//**
* 取得指定目录下的所有文件列表,包括子目录.
*
* @param baseDir
* File 指定的目录
* @return 包含java.io.File的List
*/
@SuppressWarnings("unchecked")
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
private List getSubFiles(File baseDir)
{
List ret = new ArrayList();
// File base=new File(baseDir);
File[] tmp = baseDir.listFiles();
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
for (int i = 0; i < tmp.length; i++)
{
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (tmp[i].isFile())
{
ret.add(tmp[i]);
}
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (tmp[i].isDirectory())
{
ret.addAll(getSubFiles(tmp[i]));
}
}
return ret;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/** *//**
* 给定根目录,返回另一个文件名的相对路径,用于zip文件中的路径.
*
* @param baseDir
* java.lang.String 根目录
* @param realFileName
* java.io.File 实际的文件名
* @return 相对文件名
*/
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
private String getAbsFileName(String baseDir, File realFileName)
{
File real = realFileName;
File base = new File(baseDir);
String ret = real.getName();
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
while (true)
{
real = real.getParentFile();
if (real == null)
break;
if (real.equals(base))
break;
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
else
{
ret = real.getName() + "/" + ret;
}
}
return ret;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public static void main(String[] args)
{
TestZip.zipFile();
// TestZip.unzip(url, dest);
}
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/** *//**
* 解压缩zip文件
*/
@SuppressWarnings("unchecked")
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
public static void unzip(String zipFile, String dest) throws Exception
{
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// String ctxUrl = ServletActionContext.getRequest().getRealPath("/upload");
// String url = ctxUrl + "\\" + fileName;
// String dest = ctxUrl;
// zipFile = url;
ZipFile zip = new ZipFile(zipFile);
Enumeration<ZipEntry> en = (Enumeration)zip.entries();
ZipEntry entry = null;
byte[] buffer = new byte[1024];
int length = -1;
InputStream input = null;
BufferedOutputStream bos = null;
File file = null;
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
while (en.hasMoreElements())
{
entry = (ZipEntry) en.nextElement();
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (entry.isDirectory())
{
file = new File(dest, entry.getName());
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (!file.exists())
{
file.mkdir();
}
continue;
}
input = zip.getInputStream(entry);
file = new File(dest, entry.getName());
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
if (!file.getParentFile().exists())
{
file.getParentFile().mkdirs();
}
bos = new BufferedOutputStream(new FileOutputStream(file));
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
while (true)
{
length = input.read(buffer);
if (length == -1)
break;
bos.write(buffer, 0, length);
}
bos.close();
input.close();
}
zip.close();
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
posted @
2009-11-10 17:52
弹着钢琴设计
阅读(
294)
评论()
编辑
收藏
举报