您的位置:首页 > 编程语言 > Java开发

bad3 JAVA实现实用的ZIP压缩与解压

2017-08-06 11:13 387 查看
程序实现了ZIP压缩。共分为2部分 : 压缩(compression)与解压(decompression)

大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压。 需在代码中自定义源输入路径和目标输出路径。

[java] view plaincopy

package com.han;
import java.io.*;
import java.util.zip.*;

/**
 * 程序实现了ZIP压缩。共分为2部分 :
 * 压缩(compression)与解压(decompression)
 * <p>
 * 大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压。
 * 需在代码中自定义源输入路径和目标输出路径。
 * <p>
 * 在本段代码中,实现的是压缩部分;解压部分见本包中decompression部分。
 * @author HAN
 *
 */
public class CopyOfMyZipCompressing {
    private int k=1;   //定义递归次数变量
    public CopyOfMyZipCompressing() {
        // TODO Auto-generated constructor stub
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        long startTime=System.currentTimeMillis();
        CopyOfMyZipCompressing book=new CopyOfMyZipCompressing();
        try {
            book.zip(“C:\\Users\\HAN\\Desktop\\stock\\SpectreCompressed.zip”, //自定义的zip输出路径

                    new File(“C:\\Users\\HAN\\Desktop\\CombinedSpectres.txt”)); //自定义的源输入路径,即要压缩的文件或文件夹

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        long endTime=System.currentTimeMillis();
        System.out.println(“耗费时间: “+(endTime-startTime)+” ms”);
    }

    private void zip(String zipFileName, File inputFile) throws Exception{
        System.out.println(“压缩中…”);
        ZipOutputStream out=new ZipOutputStream(new FileOutputStream(zipFileName));

        BufferedOutputStream bo=new BufferedOutputStream(out);
        zip(out,inputFile, “/”+inputFile.getName(),bo);
        bo.close();
        out.close();  //输出流关闭
        System.out.println(“压缩完成”);
    }
    private void zip(ZipOutputStream out, File f, String base, BufferedOutputStream bo)

    throws Exception{ //方法重载
        if (f.isDirectory()){
            File[] fl=f.listFiles();
            for(int i=0;i<fl.length;i++){
                zip(out, fl[i],base+”/”+fl[i].getName(),bo);    //递归遍历子文件夹
            }
            System.out.println(“第”+k+”次递归”);
            k++;
        }else{
            out.putNextEntry(new ZipEntry(base)); // 创建zip压缩进入点base
            System.out.println(base);
            FileInputStream in=new FileInputStream(f);
            BufferedInputStream bi=new BufferedInputStream(in);
            int b;
            while((b=bi.read())!=-1){
                bo.write(b); //将字节流写入当前zip目录
            }
            bi.close();
            in.close(); //输入流关闭
        }
    }
}

 

[java] view plaincopy

package com.han;

import java.io.*;
import java.util.zip.*;
/**
 * 程序实现了ZIP压缩。共分为2部分 :
 * 压缩(compression)与解压(decompression)
 * <p>
 * 大致功能包括用了多态,递归等JAVA核心技术,可以对单个文件和任意级联文件夹进行压缩和解压。
 * 需在代码中自定义源输入路径和目标输出路径。
 * <p>
 * 在本段代码中,实现的是解压部分;压缩部分见本包中compression部分。
 * @author HAN
 *
 */
public class CopyOfMyzipDecompressing {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        long startTime=System.currentTimeMillis();
        try {
            ZipInputStream Zin=new ZipInputStream(new FileInputStream(
                    “C:\\Users\\HAN\\Desktop\\stock\\SpectreCompressed.zip”));//输入源zip路径

            BufferedInputStream Bin=new BufferedInputStream(Zin);
            String Parent=”C:\\Users\\HAN\\Desktop”; //输出路径(文件夹目录)
            File Fout=null;
            ZipEntry entry;
            try {
                while((entry = Zin.getNextEntry())!=null && !entry.isDirectory()){

                    Fout=new File(Parent,entry.getName());
                    if(!Fout.exists()){
                        (new File(Fout.getParent())).mkdirs();
                    }
                    FileOutputStream out=new FileOutputStream(Fout);
                    BufferedOutputStream Bout=new BufferedOutputStream(out);
                    int b;
                    while((b=Bin.read())!=-1){
                        Bout.write(b);
                    }
                    Bout.close();
                    out.close();
                    System.out.println(Fout+”解压成功”);
                }
                Bin.close();
                Zin.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        long endTime=System.currentTimeMillis();
        System.out.println(“耗费时间: “+(endTime-startTime)+” ms”);
    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: