zoukankan      html  css  js  c++  java
  • 原生java 压缩解压zip文件

    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.nio.charset.Charset;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipInputStream;
    import java.util.zip.ZipOutputStream;
    
    
    public class ZipUtil {  
      
        static int k = 1; // 定义递归次数变量  
        
        public static void main(String[] args) { 
            compression("D:\1111", "D:\usr\oracle\weblogic\user_projects\domains\spsj\files\spdbFolder\T0\HB11512900H000120161130001220112.zip");
            decompression("D:\usr\oracle\weblogic\user_projects\domains\spsj\files\spdbFolder\T0\HB11512900H00012016113000122011.zip", "GBK", "D:\1222");
        }
    
        
        /**
         * 
         * @Description (压缩)
         * @throws Exception
         */
        private static void compression(String inputFilePath, String outPutZip) { 
            try {
                String zipFileName = outPutZip;
                File inputFile = new File(inputFilePath);
                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("压缩完成");
            } catch (Exception e) {
                e.printStackTrace();
            }  
        }  
      
        private static void zip(ZipOutputStream out, File inputFile, String base, BufferedOutputStream bo) throws Exception { // 方法重载  
            if (inputFile.isDirectory()) {  
                File[] fl = inputFile.listFiles();  
                if (fl.length == 0) {  
                    out.putNextEntry(new ZipEntry(base + "/")); // 创建zip压缩进入点base  
                    System.out.println(base + "/");  
                }  
                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(inputFile);  
                BufferedInputStream bi = new BufferedInputStream(in);  
                int b;  
                while ((b = bi.read()) != -1) {  
                    bo.write(b); // 将字节流写入当前zip目录  
                }  
                bi.close();  
                in.close(); // 输入流关闭  
            }  
        }  
        
        
       /**
        * 
        * @Description (解压)
        * @param zipPath zip路径
        * @param charset 编码
        * @param outPutPath 输出路径
        */
        private static void decompression(String zipPath, String charset, String outPutPath) {
            long startTime=System.currentTimeMillis();  
            try {  
                ZipInputStream Zin=new ZipInputStream(new FileInputStream(zipPath), Charset.forName(charset));//输入源zip路径  
                BufferedInputStream Bin=new BufferedInputStream(Zin);  
                String Parent = outPutPath; //输出路径(文件夹目录)  
                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");
        }  
      
    }  
  • 相关阅读:
    关于params
    javascript判断gridview中的checkbox是否选中!
    读取Excel内容,导入数据库多张表!
    转向新页,控制页面大小并传值
    DropDownList分层显示!
    验证输入的是否数字的几种方法
    CentOS 6.5编译安装Nginx1.6.2+MySQL5.5.32+PHP5.3.27
    hdu 2425最短路
    hdu 2207水题
    hdu 3079水题
  • 原文地址:https://www.cnblogs.com/sprinng/p/6133755.html
Copyright © 2011-2022 走看看