将具有子文件夹结构的压缩文件夹解压缩到单个文件夹中

时间:2014-04-18 09:43:53

标签: java unzip

我想将具有子文件夹结构的压缩文件夹解压缩到单个文件中,而不是在同一个子文件夹中。我有下面的代码,它创建zip的子文件夹结构并复制文件。但我需要将所有文件复制到一个文件夹中。是否可能。

以下是代码: -     公共课UnZip     {     列表fileList;     private static final String INPUT_ZIP_FILE =" C:\ MyFile.zip&#34 ;;     private static final String OUTPUT_FOLDER =" C:\ outputzip&#34 ;;

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(); 
    }
   }    
}

提前致谢!!

1 个答案:

答案 0 :(得分:0)

拿这个

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

public class Unzip {

    public static final String OUTPUT_FOLDER = "/tmp/zipoutput";
    public static final String INPUT_ZIP_FILE = "/tmp/ziptest.zip";

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

    public static class UnZip {

        /**
         * 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(outputFolder);
                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();
                    if (ze.isDirectory()) {
                        ze = zis.getNextEntry();
                        continue;
                    }
                    System.out.println("origin file: " + fileName);
                    fileName = new File(fileName).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();
            }
        }
    }
}