Java IO--压缩流ZipOutputStream/ZipInputStream

简介: <h1>压缩流:</h1> <p><img src="http://img.blog.csdn.net/20131114085358046" alt=""><br></p> <h1>压缩流的实现:</h1> <div><img src="http://img.blog.csdn.net/20131114085601531" alt=""><br></div> <h1>zipEn

压缩流:


压缩流的实现:


zipEntry:


在实例化ZipEntry的时候,要设置名称,此名称实际上就是压缩文件中的每一个元素的名称。

ZipOutputStream:



import java.io.File ;
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.File ;
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.File ;
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() ;
	}
};

总结:


目录
相关文章
|
1月前
|
存储 Java 数据处理
|
1月前
|
存储 Java 文件存储
如何用 Java 压缩 ZIP 文件?
【2月更文挑战第21天】
29 1
|
1月前
|
Java API
java中IO与NIO有什么不同
java中IO与NIO有什么不同
|
3月前
|
存储 Java 数据安全/隐私保护
从零开始学习 Java:简单易懂的入门指南之IO字符流(三十一)
从零开始学习 Java:简单易懂的入门指南之IO字符流(三十一)
|
3月前
|
存储 算法 Java
从零开始学习 Java:简单易懂的入门指南之IO序列化、打印流、压缩流(三十三)
从零开始学习 Java:简单易懂的入门指南之IO序列化、打印流、压缩流(三十三)
|
14天前
|
存储 Java
探索 Java IO 流的多种实现方式
【4月更文挑战第4天】Java IO 流是处理输入输出的关键组件,包括文件流(FileInputStream/FileOutputStream)、字符流(FileReader/FileWriter)、缓冲区流(BufferedInputStream/BufferedOutputStream)、转换流(InputStreamReader/OutputStreamWriter)、数据流(DataInputStream/DataOutputStream)、对象流(ObjectInputStream/ObjectOutputStream)、随机访问文件流(RandomAccessFile)和管道流。
|
26天前
|
Java 关系型数据库 MySQL
Flink1.18.1和CDC2.4.1 本地没问题 提交任务到服务器 报错java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.mysql.MySqlConnectorConfig
【2月更文挑战第33天】Flink1.18.1和CDC2.4.1 本地没问题 提交任务到服务器 报错java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.mysql.MySqlConnectorConfig
46 2
|
1月前
|
Java
|
2月前
|
Java 数据处理
如何玩转Java IO?
【2月更文挑战第7天】
218 0
如何玩转Java IO?
|
2月前
|
缓存 分布式计算 Java
Java基础深化和提高-------IO流
Java基础深化和提高-------IO流
108 0