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

    1.生成zip

    public static void main(String[] args) {
            try {
    //            testZip("c:\temp.txt", "c:\temp4.zip");
    //            testZip("c:\Result.txt", "c:\temp4.zip");  //不然会被一个文件覆盖了.
                
                //压缩多个文件的关键: ZipOutputStream out 作为参数传递.
                //一个流,否则存在覆盖的问题,即每次会new一个,所以外置.
                ZipOutputStream zos = null;
                 zos = new ZipOutputStream(new FileOutputStream("c:\temp5.zip"));
                 
                testZip("c:\temp.txt",zos);
                testZip("c:\Result.txt",zos);
                
                //外置
                zos.closeEntry();
                zos.close();
                
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    /**
         * 重复压缩文件
         * @param zipEntryName  // 去掉String zipEntryName,
         * @param filePath
         * @param zipPath
         * @throws Exception
         */
        public static void testZip(String filePath,ZipOutputStream zos) throws Exception{
            
            //压缩包
                    /*ZipOutputStream zos = null;*/
                    
    //                BufferedOutputStream bos = null;
    //                File zipFile = new File(zipPath);
    //                if(zipFile.exists()==false){
                    /* zos = new ZipOutputStream(new FileOutputStream(zipPath));*/
                     
    //                 bos = new BufferedOutputStream(zos);   //Buffer...
    //                }else{
    //                    
    //                }
                     
                     
            File f = new File(filePath);
            
            // //create zip
            FileInputStream fis = new FileInputStream(f);
    //        BufferedInputStream bis = new BufferedInputStream(fis);
        
            
            
            // set the file name in the .zip file
    //        zos.putNextEntry(new ZipEntry(zipEntryName));
             zos.putNextEntry(new ZipEntry(f.getName()));
            // set the declear
            zos.setComment("by zip test!");
    
    //        byte[] b = new byte[1024];
    //        while (true) {
    //            int len = bis.read(b);
    //            if (len == -1)
    //                break;
    //            bos.write(b, 0, len);
    //            System.out.println(new String(b, 0, len));
    //        }
    //        bos.flush();  //这一行重要,否则txt是空白文件.
            
            byte[] buffer = new byte[1024];
             int len = 0 ;
             // 读取文件的内容,打包到zip文件    
             while ((len = fis.read(buffer)) > 0) {
                 zos.write(buffer, 0, len);
             }
             
            fis.close();
            /*zos.closeEntry();
            zos.close();*/
        }

    2.解压缩

    public static void main(String[] args) throws Exception {
            // get a zip file instance
            File file = new File("c:\temp5.zip");
    
            // get a ZipFile instance
            ZipFile zipFile = new ZipFile(file);
    
            // create a ZipInputStream instance
            ZipInputStream zis = new ZipInputStream(new FileInputStream(file));
    
            // create a ZipEntry instance , lay the every file from
            // decompress file temporarily
            ZipEntry entry = null;
    
            // a circle to get every file
            while ((entry = zis.getNextEntry()) != null) {
                System.out.println("decompress file :" + entry.getName());
    
                // define the path to set the file
                File outFile = new File("c:\zip\"
                        + entry.getName());
    
                // if the file's parent directory wasn't exits ,than
                // create the directory
                if (!outFile.getParentFile().exists()) {
                    outFile.getParentFile().mkdir();
                }
    
                // if the file not exits ,than create the file
                if (!outFile.exists()) {
                    outFile.createNewFile();
                }
    
                // create an input stream  读文件
                BufferedInputStream bis = new BufferedInputStream(
                        zipFile.getInputStream(entry));
    
                // create an output stream 写文件
                BufferedOutputStream bos = new BufferedOutputStream(
                        new FileOutputStream(outFile));
                byte[] b = new byte[1024];
                while (true) {
                    int len = bis.read(b);
                    if (len == -1)
                        break;
                    bos.write(b, 0, len);
                }
                // close stream
                bis.close();
                bos.close();
            }
            zis.close();
        }
  • 相关阅读:
    函数
    拉取代码到本地
    逻辑位运算符 以及 布尔运算符&&、||
    JS中substr与substring的区别
    ? :和!:的用法含义及es6语法...
    JS中attribute和property的区别
    并发、并行的理解
    斑鸠云商小程序记住账号和密码
    js中的foreach用法
    指针与数组
  • 原文地址:https://www.cnblogs.com/simpledev/p/6852816.html
Copyright © 2011-2022 走看看