venerdì 5 agosto 2011

Zippare File in Java


Una semplice classe di utilità per zippare dei file.
Ha due costruttori, in uno passiamo la lista dei file (il percorso completo) da zippare e il nome (percorso incluso) dello zip risultante, l’altro invece accetta come parametri la Stringa contenente il singolo file da zippare
e il nome dell’output.




      
package it.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.LinkedList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipFile {
    private List<String> listaFiles;
    private String nomeZip;
       public ZipFile(List<String> listaFile,String nomeZip){
             this.nomeZip=nomeZip;
             this.listaFiles=listaFile;
       }
       public ZipFile(String nomeFile,String nomeZip){
             listaFiles=new LinkedList<String>();
             listaFiles.add(nomeFile);
             this.nomeZip=nomeZip;
       }
       public static void main(String[] args) {
             try
             {
                    ZipFile zf=new ZipFile("out/AMF050_test_20100601_20110228.txt", "out/test.zip");
                    zf.zippa();
             }
             catch(Exception ex){
                    ex.printStackTrace();
             }           
       }
       /**
        * Per evitare che dentro lo zip sia ricreata <br>
        * la eventuale struttura delle directory e sottodirectory del file di origine
        * @param nome
        * @return
        */
       private String nomeFile(String nome){
             StringBuffer sb=new StringBuffer();
             if(nome.indexOf("/")>0){
                    sb.append(nome.substring(nome.lastIndexOf("/")+1));
             }
             else if(nome.indexOf(File.separator)>0){
                    sb.append(nome.substring(nome.lastIndexOf(File.separator)+1));
             }
             else
             {
                    sb.append(nome);
             }
             return sb.toString();
       }
       public void zippa() throws Exception
       {
             byte[] buf = new byte[1024];
              ZipOutputStream out = new ZipOutputStream(new FileOutputStream(nomeZip));
              for(String file:listaFiles){
                     FileInputStream in = new FileInputStream(file);
                     out.putNextEntry(new ZipEntry(nomeFile(file)));
                     int len;
                     while ((len = in.read(buf)) > 0) {
                         out.write(buf, 0, len);
                     }
                     out.closeEntry();
                     in.close();

              }
              out.close();
       }
}



 


Nessun commento:

Posta un commento