• 原生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");
        }  
      
    }  
  • 相关阅读:
    动态类(类工厂)总结
    m3u8字段意义解析
    libevent+bufferevent总结
    g++编译总结
    ffplay 参数说明分享
    PHP——最新号码归属地数据库
    PHP——汉字完美转为ASCII码
    PHP——json_encode转码保留中文
    workerman——报错
    PHP——封装Curl请求方法支持POST | DELETE | GET | PUT 等
  • 原文地址:https://www.cnblogs.com/sprinng/p/6133755.html
Copyright © 2020-2023  润新知