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();
		}
	}

}

 

合并流的主要功能是将两个文件的内容合并成一个文件。

如果要实现合并流,则必须使用SequenceInputStream类

压缩流和合并流_输出流_02

 

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.SequenceInputStream;

//=================================================
// File Name       :	SequenceInputStream_demo
//------------------------------------------------------------------------------
// Author          :	Common



//主类
//Function        : 	SequenceInputStream_demo;
public class SequenceInputStream_demo {

	public static void main(String[] args) throws Exception{
		// TODO 自动生成的方法存根
		InputStream is1 = null;				//输入流1
		InputStream is2 = null;				//输入流2
		OutputStream os = null;				//输出流
		SequenceInputStream sis = null;	//合并流
		
		is1 = new FileInputStream("/home/common/software/coding/HelloWord/HelloWord/a.txt");
		is2 = new FileInputStream("/home/common/software/coding/HelloWord/HelloWord/b.txt");
		os = new FileOutputStream("/home/common/software/coding/HelloWord/HelloWord/ab.txt");
		sis = new SequenceInputStream(is1,is2);				//实例化合并流
		int temp = 0;
		while((temp = sis.read()) != -1){
			os.write(temp);
		}
		sis.close();
		is1.close();
		is2.close();
		os.close();
	}

}