</pre><pre name="code" class="java">/**
通过查阅API帮助文档,在java.util.zip包中找到所需进行压缩解压的操作类。
1、解压文件:ZipInputStream
构造方法:
ZipInputStream(InputStream in)
所需方法:
1、void close()关闭流操作
2、void closeEntry()关闭当前ZIP条目并定位流以操作下一个条目。
3、ZipEntry getNextEntry()读取下一个zip条目,并将流定位到该条目数据开始的地方。
4、read(byte[] b, int off, int len) 从当前 ZIP 条目读入字节数组。
介绍下ZipEntry类:
构造方法:
ZipEntry(String name)使用指定名称创建新的条目
常用方法:
1、getName()获取条目名称
2、getSize()返回条目压缩大小
3、isDirectory()是否为目录条目
ZipFile函数:
1、void close() 关闭 ZIP 文件。
2、Enumeration<? extends ZipEntry> entries() 返回 ZIP 文件条目的枚举。
3、protected void finalize() 确保不再引用此 ZIP 文件时调用它的 close 方法。
4、ZipEntry getEntry(String name) 返回指定名称的 ZIP 文件条目;如果未找到,则返回 null。
5、InputStream getInputStream(ZipEntry entry) 返回输入流以读取指定 ZIP 文件条目的内容。
6、String getName() 返回 ZIP 文件的路径名。
7、int size()返回 ZIP 文件中的条目数。
*/
import java.io.*;
import java.util.Enumeration;
import java.util.zip.*;;
import java.lang.Exception.*;
class Zip
{
private String zipFile;
private String zipFilePath;
Zip(String zipFile,String zipFilePath)
{
this.zipFile = zipFile;
this.zipFilePath = zipFilePath;
}
/*
利用zipEntry类进行解压文件的使用,通过zipEntry的方法获取文件的大小、名称,
利用zipInputStream的方法来读取文件进行。
*/
public boolean unzipFile()
{
try
{
File zipfile = new File(zipFile);
File unzipfile = new File(zipFilePath);
if(!zipfile.exists())
{
System.out.println("解压文件不存在,请检查文件路径。");
return false;
}
ZipInputStream zipin = new ZipInputStream(new FileInputStream(zipfile));
ZipEntry zipEn = null;
while((zipEn = zipin.getNextEntry()) != null)
{
String fileName = zipEn.getName();
if(zipEn.isDirectory())
{
File dirfile = new File(unzipfile,fileName);
System.out.println("正在创建文件夹【"+ fileName + "】");
dirfile.mkdirs();
}
else
{
System.out.println("正在解压文件【" + fileName +"】");
File temfile = new File(unzipfile,fileName);
FileOutputStream fos = new FileOutputStream(temfile);
byte[] buf =new byte[1024];
int len = 0;
while((len = zipin.read(buf)) != -1)
fos.write(buf,0,len);
//关闭当前条目
zipin.closeEntry();
}
}
//关闭与资源关联的所有流
zipin.close();
return true;
}
catch (Exception ex)
{
throw new RuntimeException("解压文件错误。");
}
}
/*
利用ZipFile类中的方法对文件进行读取。
步骤:
1、通过ZipFile的entries()返回 ZIP 文件条目的枚举。
2、 ZipEntry getEntry(String name) 返回指定名称的 ZIP 文件条目;如果未找到,则返回 null。
3、通过 InputStream getInputStream(ZipEntry entry) 返回输入流以读取指定 ZIP 文件条目的内容。
*/
public boolean unzipFile2()
{
try
{
File zipfile = new File(zipFile);
File unzipfile = new File(zipFilePath);
if(!zipfile.exists())
{
System.out.println("解压文件不存在,请检查文件路径。");
return false;
}
ZipFile zfile= new ZipFile(zipfile);
Enumeration<? extends ZipEntry> zipEntries = zfile.entries();
ZipEntry zipEntry = null;
while(zipEntries.hasMoreElements())
{
zipEntry = zipEntries.nextElement();
InputStream in = zfile.getInputStream(zipEntry);
String fileName = zipEntry.getName();
if(zipEntry.isDirectory())
{
File dirfile = new File(unzipfile,fileName);
System.out.println("正在创建文件夹【"+ fileName + "】");
dirfile.mkdirs();
}
else
{
System.out.println("正在解压文件【" + fileName +"】");
File temFile = new File(unzipfile,fileName);
FileOutputStream fos = new FileOutputStream(temFile);
byte[] buf =new byte[1024];
int len = 0;
while((len = in.read(buf)) != -1)
fos.write(buf,0,len);
fos.close();
}
in.close();
return true;
}
zfile.close();
return true;
}
catch (Exception ex)
{
throw new RuntimeException("解压文件错误。");
}
}
}
class ZipDemo
{
public static void main(String[] args) throws Exception
{
if(args.length != 2)
{
System.out.println("请输入压缩文件路径和保存路径。");
return;
}
Zip zip = new Zip(args[0],args[1]);
if(zip.unzipFile2())
System.out.println("解压成功。");
else
System.out.println("解压失败.");
}
}