Question

I want to unzip a zipped folder which is having subfolder structure into a single file and not in the same subfolder form. I have below code which creates the subfolder structure of zip and copies the file. But I need to copy all the files in a single folder. Is it possible.

Below is the code:- public class UnZip { List 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(); 
    }
   }    
}

Thanks in advance !!

Was it helpful?

Solution

Take this

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();
            }
        }
    }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top