//dosya : zip.java
//Turhan Çoban 24.2.2001
import java.io.*;
import java.util.*;
import java.util.zip.*;
import javax.swing.JOptionPane;

public class zip {
    public static int sChunk = 8192;
    public static String[] dosyalistesi(String p)
    {
     File path=new File(p);
     if(path.isDirectory())
     {
     Vector x=new Vector();
     File files[];
     files=path.listFiles();
     int n=files.length;
     int n1=0;
     for(int i=0;i<n;i++)
     {
       if(!files[i].isDirectory())
          {
          x.addElement(files[i].toString());
          n1++;
          }
     }
     String s1[];
     s1=new String[n1];
     Enumeration nn=x.elements();
     int k=0;
     while(nn.hasMoreElements())
     {
     s1[k++]=(String)nn.nextElement();
     }
     return s1;
     }
     else
     {
     String[] s1 = new String[1];
     s1[0]=p;
     return s1;
     }
    }

    public static void main(String[] args) {
    String str="";
    FileOutputStream out;
    ZipOutputStream zout;
    String zipname, source;
    String s="KULLANIM: \n"+
      "java zip zipdosyası dosya(veyadirectory)ismi1 dosya(veya directory)ismi2...\n"+
      " zip dosyası yarat ve dosya(veya directorylerdeki dosyaları) sıkıştır "+
      " alt direktoryler atlanmaktadır gerekiyorsa tekrar tanımla";
//  anahtarı kontrol et
     if(args.length<1 )
     {
     String s1="zipdosyası isim.zip tanımlanmadı lütfen argümanları giriniz\n"+s;
     JOptionPane.showMessageDialog(null,s1);
     System.exit(0);
     return;
     } // girdi dosyasını incele
    else if(args.length<2)
     {
     String s1="sıkıştırılacak dosya(veya direktory) isimleri tanımlanmadı\n"+
     " lütfen argümanları giriniz\n"+s;
     JOptionPane.showMessageDialog(null,s1);
     System.exit(0);
     return;
     }
    if (args[0].endsWith(".zip")) {
      zipname = args[0];
      source = args[0].substring(0, args[0].length(  ) - 3);
    }
    else {
      zipname = args[0] + ".zip";
      source = args[0];
         }
    //zip kanalını tanımla
    try {
    out = new FileOutputStream(zipname);
    zout=new ZipOutputStream(out);
        }
    catch (IOException e) {
    JOptionPane.showMessageDialog(null,"Dosya oluşturma hatası : " + zipname + ".");
      return;
    }
    int k=1;
    while(k<args.length)
    {
    try
    {
       String ss[];
       ss=dosyalistesi(args[k]);
       int j=0;
       byte[] buffer=new byte[sChunk];
       while(j<ss.length)
       {
       ZipEntry giris=new ZipEntry(ss[j]);
       zout.putNextEntry(giris);
       try {
           FileInputStream in=new FileInputStream(ss[j]);
           int length;
           while((length=in.read(buffer,0,sChunk))!=-1)
               zout.write(buffer,0,length);
           in.close();
           } //try sonu
           catch (IOException e)
           {
           JOptionPane.showMessageDialog(null,"Dosya sıkıştırma hatası : " +ss[j] );
           } //catch sonu                                 }
       str+="ss["+j+"] = "+giris+" iceri girdi\n";
       j++;
       }//while sonu
    } //try sonu
    catch(IOException io) {}
    k++;
    } //while(k< sonu
    try{
       zout.close();
       out.close();
       }
    catch(IOException e){}
    JOptionPane.showMessageDialog(null,str);
    System.exit(0);
    }
}
