进入旧版 | 服务项目 | 成功案例 | 联系方式 | 过客留言 | 友情链接
   
设为首页
加入收藏
联系我们
网站首页 | 新闻资讯 | 操作系统 | 办公软件 | 网络软件 | 工具软件 | 媒体动画 | 网页制作 | 网站开发 | 程序开发 | 平面设计
Photoshop视频教程 | Word入门 | Flash入门 | JScript | VBScript | ASP | PHP | ADO | 网页特效 | 3DS MAX6.0命令 | 系统进程
您当前的位置:GOODSGY电脑学习网 -> 网站开发 -> JSP -> 文章内容  
在Java中操作Zip文件,压缩/解压

可随意转载,但请注明出处及作者
SonyMusic
2003.05.28
==========================================================================
在Java中操作Zip文件,压缩/解压


package test.nothing;

import java.io.*;
import java.util.*;
import java.util.zip.*;

import com.beaconsystem.util.*;

import junit.framework.TestCase;

/**
* @author SonyMusic
*
* 用于测试java.util.zip包压缩和解压缩文件zip文件的例子.
* 基于JUnit编写,包括两个test方法,和三个辅助方法.
* 注意到使用过程中操作的全是流,所以不仅仅可以读写文件。这只是一个简单的例子.
*/
public class TestZipOp extends TestCase {

/**
* Constructor for TestZipOp.
* @param arg0
*/
public TestZipOp(String arg0) {
super(arg0);
}

public static void main(String[] args) {
junit.textui.TestRunner.run(TestZipOp.class);
}

/**
* zip压缩功能测试.
* 将d:\\temp\\zipout目录下的所有文件连同子目录压缩到d:\\temp\\out.zip.
* @throws Exception
*/
public void testCreateZip() throws Exception{
//压缩baseDir下所有文件,包括子目录
String baseDir="d:\\temp\\zipout";
List fileList=getSubFiles(new File(baseDir));

//压缩文件名
ZipOutputStream zos=new ZipOutputStream(new FileOutputStream("d:\\temp\\out.zip"));

ZipEntry ze=null;
byte[] buf=new byte[1024];
int readLen=0;
for (int i = 0; i <fileList.size(); i++) {
File f=(File)fileList.get(i);
System.out.print("Adding: "+f.getPath()+f.getName());

//创建一个ZipEntry,并设置Name和其它的一些属性
ze=new ZipEntry(getAbsFileName(baseDir, f));
ze.setSize(f.length());
ze.setTime(f.lastModified());

//将ZipEntry加到zos中,再写入实际的文件内容
zos.putNextEntry(ze);
InputStream is=new BufferedInputStream(new FileInputStream(f));
while ((readLen=is.read(buf, 0, 1024))!=-1) {
zos.write(buf, 0, readLen);
}
is.close();
System.out.println("   done...");
}
zos.close();
}

/**
* 测试解压缩功能.
* 将d:\\download\\test.zip文件解压到d:\\temp\\zipout目录下.
* @throws Exception
*/
public void testReadZip() throws Exception{
//InputStream is=new BufferedInputStream(new FileInputStream());
String baseDir="d:\\temp\\zipout";
ZipFile zfile=new ZipFile("d:\\download\\Test.zip");
System.out.println(zfile.getName());
Enumeration zList=zfile.entries();
ZipEntry ze=null;
byte[] buf=new byte[1024];
while(zList.hasMoreElements()){
//从ZipFile中得到一个ZipEntry
ze=(ZipEntry)zList.nextElement();
if(ze.isDirectory()){
System.out.println("Dir: "+ze.getName()+" skipped..");
continue;
}
System.out.println("Extracting: "+ze.getName()+"\t"+ze.getSize()+"\t"+ze.getCompressedSize());

//以ZipEntry为参数得到一个InputStream,并写到OutputStream中
OutputStream os=new BufferedOutputStream(new FileOutputStream(getRealFileName(baseDir, ze.getName())));
InputStream is=new BufferedInputStream(zfile.getInputStream(ze));
int readLen=0;
while ((readLen=is.read(buf, 0, 1024))!=-1) {
os.write(buf, 0, readLen);
}
is.close();
os.close();
System.out.println("Extracted: "+ze.getName());
}
zfile.close();
}

/**
* 给定根目录,返回一个相对路径所对应的实际文件名.
* @param baseDir 指定根目录
* @param absFileName 相对路径名,来自于ZipEntry中的name
* @return java.io.File 实际的文件
*/
private File getRealFileName(String baseDir, String absFileName){
String[] dirs=Regex.split("/", absFileName);
//System.out.println(dirs.length);
File ret=new File(baseDir);
if(dirs.length>1){
for (int i = 0; i <dirs.length-1; i++) {
ret=new File(ret, dirs[i]);
}
}
if(!ret.exists()){
ret.mkdirs();
}
ret=new File(ret, dirs[dirs.length-1]);
return ret;
}

/**
* 给定根目录,返回另一个文件名的相对路径,用于zip文件中的路径.
* @param baseDir java.lang.String 根目录
* @param realFileName java.io.File 实际的文件名
* @return 相对文件名
*/
private String getAbsFileName(String baseDir, File realFileName){
File real=realFileName;
File base=new File(baseDir);
String ret=real.getName();
while (true) {
real=real.getParentFile();
if(real==null) break;
if(real.equals(base)) break;
else{
ret=real.getName()+"/"+ret;
}
}
return ret;
}

/**
* 取得指定目录下的所有文件列表,包括子目录.
* @param baseDir File 指定的目录
* @return 包含java.io.File的List
*/
private List getSubFiles(File baseDir){
List ret=new ArrayList();
//File base=new File(baseDir);
File[] tmp=baseDir.listFiles();
for (int i = 0; i <tmp.length; i++) {
if(tmp[i].isFile()){
ret.add(tmp[i]);
}
if(tmp[i].isDirectory()){
ret.addAll(getSubFiles(tmp[i]));
}
}
return ret;
}

}



在百度中搜索:在Java中操作Zip文件,压缩/解压
在Google中搜索:在Java中操作Zip文件,压缩/解压
在Yahoo中搜索:在Java中操作Zip文件,压缩/解压

收藏到网摘:新浪VIVI 365key 我摘 POCO网摘 博采中心 YouNote 和讯网摘 天天收藏
[] [返回上一页] [打 印] [收 藏]

 相关文章    最新文章
· 在Java中利用JCOM实现仿Excel编程详解
· 在JS中使用RecordSet对象的GetRows方法
· 在JavaScript中实现命名空间
· 在Javascript中,什么是闭包(Closure)
· 在JDK 6.0中基于StAX分析XML数据
· [组图] 在Java中用类装载框架控制类加载
· [图文] 浅谈Excel报表在Java程序中的应用
· 在java中找到需要的资源文件路径
· 在Java中动态执行类的静态方法
· 在JAVA应用程序中如何实现FTP的功能 (转)..
 
· 提升JSP页面响应速度的七大秘籍绝招
· 开发一个调试JSP的Eclipse插件
· JSP报表打印的一种简单解决方案
· JSP/Servlet的重定向技术综述
· java的md5加密类(zt)
· 一个用来访问http服务器的东西。功能类似..
· 菜鸟调试手记一(sql server 中文问题)
· Java性能优化技巧集锦(2)
· 用java压缩文件示例(没有中文问题)
· 使用XML/HTC/DHTML模拟标准Windows菜单

∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论…]
站内搜索

精彩图文
  网站导航  
操作系统 办公软件 网络软件
Vista Windows2003 WindowsXP Windows2000/NT Windows9X/ME Linux 其他 Word Excel Powerpoint Outlook 金山系列 其他 网页浏览 上传下载 联络聊天 邮件工具 服务器软件 网络辅助
工具软件 媒体动画 网页制作
系统工具 媒体工具 压缩工具 图文处理 文件管理 其他 3DMAX Authorware Director Maya 视频处理 其他 Flash Dreamweaver FireWorks FrontPage LiveMotion Golive HTML/CSS 其它
网站开发 平面设计 程序设计
ASP JSP PHP CGI JavaScript VBScript XML/SOAP Web服务器 Photoshop PhotoImpact CorelDraw Illustrator Freehand 设计欣赏 其他 VB VC .NET C/C++ DELPHI JAVA

冀ICP备05019428号
Copyright © 2004-2008 电脑学习网 Inc.All rights reserved.
TEL:13832340607
QQ:39873155
E_Mail:goodsgy(#)hotmail.com   (把(#)替换成@)
MSN:goodsgy(#)hotmail.com   (把(#)替换成@)