压缩流:
压缩流的实现:
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() ; } };