我在公司项目过程需要用到zip文件的压缩与解压的功能,于是自己研究了一下,找了一些,自己写了一个压缩和解压缩的代码,支持中文,可以文件嵌套(注意其中所用的类是ant.jar中的包中的类,我用的是1.6.0版本)
/** */
/**
*用于对指定源文件路径下的所有文件压缩到指定的文件中
* @param des String 需要压缩成的文件名
* @param src String 压缩文件源路径,可以是文件或文件夹
* @return boolean 如果压缩成功返回true,否则表示失败
*/
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
public
static
boolean
File2Zip(String des, String src)
...
{
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
boolean success = true; //压缩成功标志
File srcpath = new File(src);
ZipOutputStream out = null;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
try ...{
out = new ZipOutputStream(new FileOutputStream(new File(
des))); //创建压缩输出流
out.setEncoding("gbk");
compress(srcpath, out, ""); //开始压缩
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
catch (FileNotFoundException ex) ...{
success = false;
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
catch (IOException ex1) ...{
success = false;
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
finally ...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if (out != null) ...{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
try ...{
out.close();
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
catch (IOException ex2) ...{
}
}
}
return success;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
/** */
/**
*
* @param src File
* @param out ZipOutputStream
* @param base String
* @throws IOException
*/
public
static
void
compress(File src, ZipOutputStream out, String base)
throws
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
IOException
...
{
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if (src.isDirectory()) ...{ //如果是目录
File[] files = src.listFiles(); //列举出目录中所有的内容
out.putNextEntry(new ZipEntry(base + "/")); //放入一级目录
base = base.length() == 0 ? "" : base + "/";
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
for (int i = 0; i < files.length; i++) ...{
compress(files[i], out, base + files[i].getName());
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
else ...{ //如果是文件
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if("".equals(base))...{
out.putNextEntry(new ZipEntry(base+"/"));
base=src.getName();
}
out.putNextEntry(new ZipEntry(base));
FileInputStream in = new FileInputStream(src);
byte []data=new byte[4096];
int b;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
while((b=in.read(data))!=-1)...{
out.write(data,0,b);
}
in.close();
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
/** */
/**
* 解压缩文件
* @param src String zip所在路径c:/test/kk.zip
* @param des String 希望存放的目录
* @throws IOException
* @throws IOException
*/
public
static
void
decompress(String src, String des)
throws
IOException
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
...
{
ZipFile file=null;
FileOutputStream fout=null;
DataOutputStream dout=null;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
try...{
file=new ZipFile(src);
InputStream in=null;
des=des.replace('/', '/');
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if(des.startsWith("//"))...{
des=des.replaceFirst("//", "//");
}
Enumeration en=file.getEntries();
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
while(en.hasMoreElements())...{
ZipEntry entry=(ZipEntry)en.nextElement();
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if(entry.isDirectory())...{//文件夹
File directory=new File(des+"/"+entry.getName());
if(!directory.exists())
directory.mkdirs();
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
}else...{//文件
String path=entry.getName();
path=path.replace('/', '/');
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if(path.startsWith("//"))...{
path=path.replaceFirst("//", "//");
}
int pos=path.lastIndexOf('/');
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
if(pos!=-1)...{
path=path.substring(0, pos+1);
File d=new File(des+"/"+path);
if(!d.exists())
d.mkdirs();
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
try...{
File files=new File(entry.getName());
File f=new File(des+"/"+files.getPath());
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
fout=new FileOutputStream(f);
dout=new DataOutputStream(fout);
in=file.getInputStream(entry);
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
byte[] b=new byte[4096];
int len = 0;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
while ( (len = in.read(b)) != -1) ...{
dout.write(b, 0, len);
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
}catch(IOException e)...{
throw e;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
}finally...{
if(fout!=null)
fout.close();
if(dout!=null)
dout.close();
if(in!=null)
in.close();
}
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
}catch(IOException e)...{
throw e;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
}finally...{
if(file!=null)
file.close();
if(fout!=null)
fout.close();
if(dout!=null)
dout.close();
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
/** */
/**
* 解压缩zip文件
* @param src String
* @param des String
* @return boolean 成功返回true;
*/
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
public
static
boolean
zipDecompress(String src, String des)
...
{
boolean success = true;
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
try ...{
decompress(src, des);
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
catch (FileNotFoundException ex) ...{
ex.printStackTrace();
success = false;
}
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
catch (IOException ex) ...{
ex.printStackTrace();
success = false;
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
return success;
}
该类有很多不完善的地方,各位可以提意见,共同交流,谢谢