ZIP是一种较为常见的压缩形式,在Java中要实现ZIP的压缩需要导入java.util.zip包,可以使用此包中的ZipFile、ZipOutputStream、ZipInputStream和ZipEntry几个类完成操作。

<1>ZipFile类
压缩一个文件
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
//=================================================
// File Name : ZipOutputStream_demo
//------------------------------------------------------------------------------
// Author : Common
//主类
//Function : ZipOutputStream_demo;
public class ZipOutputStream_demo {
public static void main(String[] args) throws Exception{
// TODO 自动生成的方法存根
File file = new File("/home/common/software/coding/HelloWord/HelloWord/order.txt");//路径
File zipfile = new File("/home/common/software/coding/HelloWord/HelloWord/order.zip");//路径
InputStream input = new FileInputStream(file); //定义输入文件流
ZipOutputStream zipout = null; //定义压缩输出流
//实例化压缩输出流对象,并指定压缩文件的输出路径
zipout = new ZipOutputStream(new FileOutputStream(zipfile));
//每一个被压缩的文件都用ZipEntry表示,需要为每一个压缩后的文件设置名称
zipout.putNextEntry(new ZipEntry(file.getName())); //创建ZipEntry
zipout.setComment("这是压缩后的文件"); //设置注释
int temp = 0; //接收输入的数据
while((temp = input.read()) != -1){ //读取内容,采用了边读边写的方式
zipout.write(temp); //压缩输出内容
}
input.close();
zipout.close();
}
}
压缩一个文件夹
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
//=================================================
// File Name : ZipOutputStream_demo
//------------------------------------------------------------------------------
// Author : Common
//主类
//Function : ZipOutputStream_demo;
public class ZipOutputStream_demo {
public static void main(String[] args) throws Exception{
// TODO 自动生成的方法存根
// File file = new File("/home/common/software/coding/HelloWord/HelloWord/order.txt");//路径
// File zipfile = new File("/home/common/software/coding/HelloWord/HelloWord/order.zip");//路径
//
// InputStream input = new FileInputStream(file); //定义输入文件流
// ZipOutputStream zipout = null; //定义压缩输出流
// //实例化压缩输出流对象,并指定压缩文件的输出路径
// zipout = new ZipOutputStream(new FileOutputStream(zipfile));
// //每一个被压缩的文件都用ZipEntry表示,需要为每一个压缩后的文件设置名称
// zipout.putNextEntry(new ZipEntry(file.getName())); //创建ZipEntry
// zipout.setComment("这是压缩后的文件"); //设置注释
// int temp = 0; //接收输入的数据
// while((temp = input.read()) != -1){ //读取内容,采用了边读边写的方式
// zipout.write(temp); //压缩输出内容
// }
// input.close();
// zipout.close();
File file = new File("/home/common/software/coding/HelloWord/HelloWord/test");//路径
File zipfile = new File("/home/common/software/coding/HelloWord/HelloWord/order.zip");//路径
InputStream input = null; //定义输入文件流
ZipOutputStream zipout = null; //定义压缩输出流
//实例化压缩输出流对象,并指定压缩文件的输出路径
zipout = new ZipOutputStream(new FileOutputStream(zipfile));
zipout.setComment("这是压缩后的文件"); //设置注释
if(file.isDirectory()){ //判断是否是目录
File lists[] = file.listFiles(); //列出全部文件
for(int i=0;i<lists.length;i++){
input = new FileInputStream(lists[i]); //设置文件输入流
//每一个被压缩的文件都用ZipEntry表示,需要为每一个压缩后的文件设置名称
zipout.putNextEntry(new ZipEntry(file.getName()+File.separator+lists[i].getName())); //创建ZipEntry
int temp = 0;
while((temp = input.read()) != -1){
zipout.write(temp);
}
input.close();
}
}
zipout.close();
}
}
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
//=================================================
// File Name : ZipFile_demo
//------------------------------------------------------------------------------
// Author : Common
//主类
//Function : ZipFile_demo;
public class ZipFile_demo {
public static void main(String[] args) throws Exception{
// TODO 自动生成的方法存根
File file = new File("/home/common/software/coding/HelloWord/HelloWord/b.zip");//路径
File outputfile = new File("/home/common/software/coding/HelloWord/HelloWord/b1.txt");//解压缩文件名称
ZipFile zipfile = new ZipFile(file); //实例化ZipFile对象
// System.out.println("压缩文件的名称:"+zipfile.getName()); //得到压缩文件的名称
ZipEntry entry = zipfile.getEntry("b2.txt"); //得到一个压缩实体
InputStream input = zipfile.getInputStream(entry); //取得ZipEntry输入流
OutputStream out = new FileOutputStream(outputfile); //取得ZipEntry输入流
int temp = 0; //保存接收数据
while((temp = input.read()) != -1){
out.write(temp);
}
input.close();
out.close();
}
}
<2>ZipInputStream类
ZipInputStream是InputStream的子类,通过此类可以方便地读取ZIP格式的压缩文件
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;
//=================================================
// File Name : ZipInputStream_demo
//------------------------------------------------------------------------------
// Author : Common
//主类
//Function : ZipInputStream_demo;
public class ZipInputStream_demo {
public static void main(String[] args) throws Exception {
// TODO 自动生成的方法存根
File file = new File("/home/common/software/coding/HelloWord/HelloWord/HelloWord.zip");//路径
File outfile = null; //定义输出的文件对象
ZipFile zipfile = new ZipFile(file); //实例化ZipFile对象
ZipInputStream zipinput = new ZipInputStream(new FileInputStream(file)); //实例化ZIP输入流
ZipEntry entry = null; //定义一个ZipEntry对象,用于接收压缩文件中的每一个实体
InputStream input = null; //定义输入流,用于读取每一个ZipEntry
OutputStream out = null; //定义输出流,用于输出每一个实体内容
while((entry = zipinput.getNextEntry()) != null){ //得到每一个ZipEntry
System.out.println("解压缩"+entry.getName()+"文件");
outfile = new File("/home/common/software/coding/HelloWord/HelloWord"+entry.getName());
if(!outfile.getParentFile().exists()){ //判断文件夹是否存在
outfile.getParentFile().mkdirs();
}
if(!outfile.exists()){ //判断文件是否存在
outfile.createNewFile();
}
input = zipfile.getInputStream(entry); //得到压缩实体的输入流
out = new FileOutputStream(outfile); //实例化输入流对象
int temp = 0;
while((temp = input.read()) != -1){
out.write(temp);
}
input.close();
out.close();
}
}
}