Saturday, January 24, 2009

Java : Simple Program to Create zip file.

It can be used to zip both a file or a Directory. Directory is ziped along with its subdirectory structure. Just Provide the proper source and run the code.


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class CreateZip {
   
    //function to zip a single file
    //Parameters List :
    //zipSrc : source file which to be ziped
    //zipName : Give desire name to zip file
    //destination folder where to create zip file
    public void zipFile(File zipSrc,String zipName,String destFolder) {
       
        System.out.println("zipFile :: "+zipSrc.getPath()+" "+zipName+" "+destFolder);
       
        try {           
                   
            ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(destFolder+File.separator+zipName));
                   
            FileInputStream fis = new FileInputStream(zipSrc);
           
            ZipEntry zipEntry = new ZipEntry(zipSrc.getName());
           
            zos.putNextEntry(zipEntry);
           
            int bytes = 0;
            byte[] buffer = new byte[2156];
           
            bytes = fis.read(buffer);
           
            while (bytes != -1) {
                zos.write(buffer, 0, bytes);
                bytes = fis.read(buffer);
            }
           
            fis.close();
            zos.flush();
            zos.close();
           
        } catch (Exception e) {
           
            System.out.println("Exception :: "+e);
           
        }
    }
   
    //function to zip a folder containing multiple files
    //Parameters List :
    //zipSrc : source folder which to be ziped
    //zipName : Give desire name to zip file
    //destination folder where to create zip file
    public void zipDirectory(File zipSrc,String zipName,String destFolder) {
       
        System.out.println("zipDirectory :: "+zipSrc.getPath()+" "+zipName+" "+destFolder);
       
        try {
           
            ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(destFolder+File.separator+zipName));
           
            zipDirectoryUtil(zipSrc.getPath(),zos,"");
            zos.close();       
        }
        catch (Exception e) {
           
            e.printStackTrace();
        }
       
    }
   
    public void zipDirectoryUtil(String directory,ZipOutputStream zos,String path) {
       
        try {
           
            File zipDir = new File(directory);
           
            String[] allFiles = zipDir.list();
           
            int bytes = 0;
            byte[] buffer = new byte[2156];
           
            for (String eachFile : allFiles) {
               
                File file = new File(zipDir,eachFile);
               
                if(file.isDirectory()) {
                   
                    zipDirectoryUtil(file.getPath(),zos,path+file.getName()+File.separator);
                    continue;
                }
               
            FileInputStream fis = new FileInputStream(file);
           
            ZipEntry zipEntry = new ZipEntry(path+file.getName());
           
            zos.putNextEntry(zipEntry);
           
            bytes = fis.read(buffer);
           
            while (bytes != -1) {
                zos.write(buffer, 0, bytes);
                bytes = fis.read(buffer);
            }
            fis.close();
           
            }
        }
        catch (Exception e) {
           
            e.printStackTrace();
        }
    }
   
    public static void main(String[] args) {
       
        CreateZip obj = new CreateZip();
       
        obj.zipFile(new File("C:\\MY\\Code\\Photo.jpg"),"img.zip","D:\\Test\\data");
       
        obj.zipDirectory(new File("C:\\MY\\Code\\com"),"com.zip","D:\\Test\\data");

    }

}