package dynamic.sitebackup;

import java.awt.datatransfer.FlavorEvent;
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
 * Created with IntelliJ IDEA.
 * User: John
 * Date: 25/04/12
 * Time: 21:15
 * To change this template use File | Settings | File Templates.
 */
public class DirectoryZipper {

    public static void main(String[] args) throws IOException {
        zipDirectory("site_backup_20120426_14_14_16");
    }

    static byte[] buffer = new byte[8192];
    static File top_dir;

    public static void zipDirectory(String directory_name) throws IOException {

        File dir = new File(directory_name);
        if(!dir.exists())
            return;
        top_dir = dir;

        ZipOutputStream zos = new ZipOutputStream( new FileOutputStream( directory_name + ".zip" ) );

        zipRecursively(zos,dir);
        zos.close();

        System.out.println("done");

    }

    private static void zipRecursively(ZipOutputStream zos, File dir) throws IOException {

        File[] files = dir.listFiles();

//        System.out.println("zipping " + files.length + " files in directory " + dir.getAbsolutePath());
        int read = 0;
        for (int i = 0, n = files.length; i < n; i++) {
            if(files[i].isDirectory())
                zipRecursively(zos,files[i]);
            else {
                FileInputStream in = new FileInputStream(files[i]);

                ZipEntry entry = new ZipEntry(files[i].getPath().substring(top_dir.getPath().length()+1));
//                System.out.println("zipping: " + files[i].getPath());
                zos.putNextEntry(entry);
                while (-1 != (read = in.read(buffer))) {
                    zos.write(buffer, 0, read);
                }
                in.close();
                files[i].delete();
            }
        }

        dir.delete();

    }

}
