首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java UnZip程序

Java UnZip程序
EN

Stack Overflow用户
提问于 2014-09-19 11:45:44
回答 1查看 610关注 0票数 0

我有一个具有以下结构的zip文件:

代码语言:javascript
复制
MyZip.zip
|-- FOLDER_1
|   `-- FOLDER_11
|       |-- file_a
|       `-- file_b
|-- FOLDER_2
|   `-- FOLDER_22
|       `-- file_c
`-- FOLDER_3
    `-- FOLDER_33
        `-- file_d

我尝试过使用这个示例,但是它不适用于我的压缩结构。为了使这个类正确地解压缩我的压缩文件,我需要做什么?它将创建C:\outputzip\FOLDER1\FOLDER_11,其中FOLDER_11不是一个文件夹,但是一个文件调用了FOLDER_11,然后程序就中断了。

代码语言:javascript
复制
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(); 
        }
    }    
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-19 12:25:44

如果您有一些问题,请将while()循环更改为下面的循环,并在其中游玩:

代码语言:javascript
复制
        while (ze != null) {

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

            if (ze.isDirectory()) {
                File directory = new File(newFile.getPath());
                directory.mkdirs();
                ze = zis.getNextEntry();
                continue;
            }

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

            FileOutputStream fos = new FileOutputStream(newFile);

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

            fos.close();
            ze = zis.getNextEntry();
        }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25933211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档