import java.io.*;
import java.util.*;
import java.util.zip.*;
public class ZipInputStreamDemo02 {
public static void main(String[] args)throws Exception {
//将指定路径下的文件地址赋值给文件变量file(找到指定路径下的压缩文件)
File file= new File("C:\\Users\\xinle\\Desktop"+File.separator+"test.zip");
File outFile=null;//用于指向将要进行输出的文件
//(将文件file进行包装使其变为ZipFile类的文件)
ZipFile zipFile=new ZipFile(file);//对指定路径下的文件进行包装操作,使其变为实例化的压缩文件,在程序当中创建压缩文件对应的实例化对象
//新建一个文件输入流并将其进行包装使其变为一个压缩输入流用于读取压缩文件当中的数据信息
ZipInputStream zipInput=new ZipInputStream(new FileInputStream(file));
ZipEntry entry=null;
InputStream input=null;
OutputStream out=null;
//通过压缩输入流来读取压缩文件当中的实体文件
while((entry=zipInput.getNextEntry())!=null)
{
System.out.println("解压缩:"+entry.getName()+"文件。");
//实例化输出文件夹并将压缩文件夹当中的实体文件存放到文件夹当中,此时该文件夹(outFile)只是一个存在于程序当中的文件夹并不存在于硬盘当中
outFile=new File("C:\\Users\\xinle\\Desktop"+File.separator+entry.getName());
//判断当前桌面上是否有一个专门用于存放从压缩文件当中解压出来的具体文件的文件夹
if(!outFile.getParentFile().exists())
{//File.getParentFile是用于取得当前文件的上一层文件,当当前文件的上层目录不存在时先创建一个文件夹用于存放解压后的文件
outFile.getParentFile().mkdirs();//当树春文件的父目录不存在时创建其父目录文件夹
}
input=zipFile.getInputStream(entry);//得到压缩文件的输入流,将指定压缩文件当中的实体数据信息写入到输入流当中
//将当前被解压的实体文件当中的数据信息通过输出流写入到所创建的outFile文件当中去
out=new FileOutputStream(outFile);
int temp=0;
//读取输入流当中的数据信息
while((temp=input.read())!=-1)
{//将从压缩文件当中读取到的数据信息经过输出流写入到outFile文件当中去
out.write(temp);
}
input.close();
out.close();
}
}
}
开始时将要被压缩的文件:
文件当中所含内容:
对文件进行压缩后并删除源文件,然后运行程序:
并且会在桌面发现一个和源文件一样的解压文件。