压缩流:


压缩流的实现:


zipEn import java.io.FileInputStream ; import java.io.InputStream ; import java.util.zip.ZipEntry ; import java.util.zip.ZipOutputStream ; import java.io.FileOutputStream ; public class ZipOutputStreamDemo01{ public static void main(String args[]) throws Exception{ // 所有异常抛出 File file = new File("d:" + File.separator + "mldn.txt") ; // 定义要压缩的文件 File zipFile = new File("d:" + File.separator + "mldn.zip") ; // 定义压缩文件名称 InputStream input = new FileInputStream(file) ; // 定义文件的输入流 ZipOutputStream zipOut = null ; // 声明压缩流对象 zipOut = new ZipOutputStream(new FileOutputStream(zipFile)) ; zipOut.putNextEntry(new ZipEntry(file.getName())) ; // 设置ZipEntry对象 zipOut.setComment("www.mldnjava.cn") ; // 设置注释 int temp = 0 ; while((temp=input.read())!=-1){ // 读取内容 zipOut.write(temp) ; // 压缩输出 input.close() ; // 关闭输入流 zipOut.close() ; // 关闭输出流 以上的操作只是完成了一个文件的压缩,如果要完成一个文件夹的压缩呢?

压缩一个文件夹:

import java.io.FileInputStream ; import java.io.InputStream ; import java.util.zip.ZipEntry ; import java.util.zip.ZipOutputStream ; import java.io.FileOutputStream ; public class ZipOutputStreamDemo02{ public static void main(String args[]) throws Exception{ // 所有异常抛出 File file = new File("d:" + File.separator + "mldn") ; // 定义要压缩的文件夹 File zipFile = new File("d:" + File.separator + "mldndir.zip") ; // 定义压缩文件名称 InputStream input = null ; // 定义文件输入流 ZipOutputStream zipOut = null ; // 声明压缩流对象 zipOut = new ZipOutputStream(new FileOutputStream(zipFile)) ; zipOut.setComment("www.mldnjava.cn") ; // 设置注释 int temp = 0 ; if(file.isDirectory()){ // 判断是否是文件夹 File lists[] = file.listFiles() ; // 列出全部文件 for(int i=0;i<lists.length;i++){ input = new FileInputStream(lists[i]) ; // 定义文件的输入流 zipOut.putNextEntry(new ZipEntry(file.getName() +File.separator+lists[i].getName())) ; // 设置ZipEntry对象 while((temp=input.read())!=-1){ // 读取内容 zipOut.write(temp) ; // 压缩输出 input.close() ; // 关闭输入流 zipOut.close() ; // 关闭输出流

ZipFile:

ZipFile在实例化的时候必须接收File类的实例,此File类的实例是指向一个压缩的*.zip文件。
为ZipFile实例化:
import java.io.File ;
import java.io.FileInputStream ;
import java.io.InputStream ;
import java.util.zip.ZipEntry ;
import java.util.zip.ZipOutputStream ;
import java.util.zip.ZipFile ;
import java.io.FileOutputStream ;
public class ZipFileDemo01{
	public static void main(String args[]) throws Exception{	// 所有异常抛出
		File file = new File("d:" + File.separator + "mldn.zip") ;	// 找到压缩文件
		ZipFile zipFile = new ZipFile(file) ;	// 实例化ZipFile对象
		System.out.println("压缩文件的名称:" + zipFile.getName()) ;	// 得到压缩文件的名称
};
通过ZipFile文件,为mldn.zip进行解压缩操作。
import java.io.File ;
import java.io.FileInputStream ;
import java.io.InputStream ;
import java.io.OutputStream ;
import java.util.zip.ZipEntry ;
import java.util.zip.ZipOutputStream ;
import java.util.zip.ZipFile ;
import java.io.FileOutputStream ;
public class ZipFileDemo02{
	public static void main(String args[]) throws Exception{	// 所有异常抛出
		File file = new File("d:" + File.separator + "mldn.zip") ;	// 找到压缩文件
		File outputFile = new File("d:" + File.separator + "mldn_unzip.txt") ; // 定义解压缩的文件名称
		ZipFile zipFile = new ZipFile(file) ;	// 实例化ZipFile对象
		ZipEntry entry = zipFile.getEntry("mldn.txt") ;	// 得到一个压缩实体
		OutputStream out = new FileOutputStream(outputFile) ; // 实例化输出流
		InputStream input = zipFile.getInputStream(entry) ;	// 得到一个压缩实体的输入流
		int temp = 0 ;
		while((temp=input.read())!=-1){
			out.write(temp) ;
		input.close() ;	// 关闭输入流
		out.close() ;	// 关闭输出流
};
以上的操作操作中,有一个问题,必须知道压缩文件中的每一个压缩实例的名称才可以进行解压缩操作,而如果现在假设是一个文件夹呢?

ZipInputStream:

import java.io.FileInputStream ; import java.io.InputStream ; import java.util.zip.ZipEntry ; import java.util.zip.ZipInputStream ; import java.io.FileInputStream ; public class ZipInputStreamDemo01{ public static void main(String args[]) throws Exception{ // 所有异常抛出 File zipFile = new File("d:" + File.separator + "mldn.zip") ; // 定义压缩文件名称 ZipInputStream input = null ; // 定义压缩输入流 input = new ZipInputStream(new FileInputStream(zipFile)) ; // 实例化ZIpInputStream ZipEntry entry = input.getNextEntry() ; // 得到一个压缩实体 System.out.println("压缩实体名称:" + entry.getName()) ; input.close() ;
import java.io.File ;
import java.io.OutputStream ;
import java.io.InputStream ;
import java.util.zip.ZipEntry ;
import java.util.zip.ZipFile ;
import java.util.zip.ZipInputStream ;
import java.io.FileInputStream ;
import java.io.FileOutputStream ;
public class ZipInputStreamDemo02{
	public static void main(String args[]) throws Exception{	// 所有异常抛出
		File file = new File("d:" + File.separator + "mldndir.zip") ;	// 定义压缩文件名称
		File outFile = null ;	// 输出文件的时候要有文件夹的操作
		ZipFile zipFile = new ZipFile(file) ;	// 实例化ZipFile对象
		ZipInputStream zipInput = null ;	// 定义压缩输入流
		OutputStream out = null ;	// 定义输出流,用于输出每一个实体内容
		InputStream input = null ;	// 定义输入流,读取每一个ZipEntry
		ZipEntry entry = null ;	// 每一个压缩实体
		zipInput = new ZipInputStream(new FileInputStream(file)) ;	// 实例化ZIpInputStream
		while((entry = zipInput.getNextEntry())!=null){	// 得到一个压缩实体
			System.out.println("解压缩" + entry.getName() + "文件。") ;
			outFile = new File("d:" + File.separator + entry.getName()) ;	// 定义输出的文件路径
			if(!outFile.getParentFile().exists()){	// 如果输出文件夹不存在
				outFile.getParentFile().mkdir() ;	// 创建文件夹
			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() ;	// 关闭输出流
		input.close() ;
            【黑马Android】(05)短信/查询和添加/内容观察者使用/子线程网络图片查看器和Handler消息处理器/html查看器/使用HttpURLConnection采用Post方式请求数据/开源项目
            【黑马Android】(04)数据库的创建和sql语句增删改查/LinearLayout展示列表数据/ListView的使用和BaseAdater/内容提供者创建
            最强大脑--51度灰挑战项目
            【黑马Android】(03)学生管理系统/动态刷新界面
            【黑马Android】(02)短信发送器/布局演示/android下单位/android下Junit/保存数据/android下权限/xml解析和序列化
                Java哈夫曼编码实现压缩与解压
            
哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码(有时也称为霍夫曼编码)。
【黑马Android】(05)短信/查询和添加/内容观察者使用/子线程网络图片查看器和Handler消息处理器/html查看器/使用HttpURLConnection采用Post方式请求数据/开源项目 【黑马Android】(04)数据库的创建和sql语句增删改查/LinearLayout展示列表数据/ListView的使用和BaseAdater/内容提供者创建 最强大脑--51度灰挑战项目 【黑马Android】(03)学生管理系统/动态刷新界面 【黑马Android】(02)短信发送器/布局演示/android下单位/android下Junit/保存数据/android下权限/xml解析和序列化