如何阅读zip文件的内容并保存文件

时间:2014-10-20 15:58:14

标签: java groovy zipfile

我希望以递归方式读取zip文件的内容,并将所有找到的文件保存到我的硬盘中。

我正在阅读这样的zip文件:

def zipFile = new java.util.zip.ZipFile(new File('/Users/birdy/test.zip'))

zipFile.entries().findAll { !it.directory }.each {
    def is = zipFile.getInputStream(it)
    //how do i store this stream to a file?
}

如果zip文件包含以下文件:

folder1/test1.txt
folder2/test2.jpg

然后我希望将test1.txttest2.jpg存储到我的HD

2 个答案:

答案 0 :(得分:2)

你走了:

import java.util.zip.*

def zipIn = new File('lol.zip')
def zip = new ZipFile(zipIn)

zip.entries().findAll { !it.directory }.each { e ->
    (e.name as File).with{ f ->
        f.parentFile?.mkdirs()
        f.withOutputStream { w ->
            w << zip.getInputStream(e)
        }
    }
}

一切都清楚了吗?

答案 1 :(得分:0)

使用Java代码

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class UnZip
{
    List<String> fileList;
    private static final String INPUT_ZIP_FILE = "C:\\MyFile.zip";
    private static final String OUTPUT_FOLDER = "C:\\outputzip";

    public static void main( String[] args )
    {
        UnZip unZip = new UnZip();
        unZip.unZipIt(INPUT_ZIP_FILE,OUTPUT_FOLDER);
    }

    /**
     * Unzip it
     * @param zipFile input zip file
     * @param output zip file output folder
     */
    public void unZipIt(String zipFile, String outputFolder){

     byte[] buffer = new byte[1024];

     try{

        //create output directory is not exists
        File folder = new File(OUTPUT_FOLDER);
        if(!folder.exists()){
            folder.mkdir();
        }

        //get the zip file content
        ZipInputStream zis = 
            new ZipInputStream(new FileInputStream(zipFile));
        //get the zipped file list entry
        ZipEntry ze = zis.getNextEntry();

        while(ze!=null){

           String fileName = ze.getName();
           File newFile = new File(outputFolder + File.separator + fileName);

           System.out.println("file unzip : "+ newFile.getAbsoluteFile());

            //create all non exists folders
            //else you will hit FileNotFoundException for compressed folder
            new File(newFile.getParent()).mkdirs();

            FileOutputStream fos = new FileOutputStream(newFile);             

            int len;
            while ((len = zis.read(buffer)) > 0) {
            fos.write(buffer, 0, len);
            }

            fos.close();   
            ze = zis.getNextEntry();
        }

        zis.closeEntry();
        zis.close();

        System.out.println("Done");

    }catch(IOException ex){
       ex.printStackTrace(); 
    }
   }    
}