Creare file compressi/zippati

DOMANDA:

Posso creare un file .zip o un file compresso in Java?



RISPOSTA:

Nella classe Compress qui di seguito, vi mostro quanto è semplice comprimere un'intera directory:


package compressione;

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


public class Compress {


 public static void compress(File f,
                             String path,
                             ZipOutputStream zos)
               throws IOException {

    boolean isDirectory = f.isDirectory();
    //le directory terminano con "/", altrimenti sono file
    final String nextPath = path +
                            f.getName() +
                           (isDirectory ? "/" : "");
 
    ZipEntry zipEntry = new ZipEntry(nextPath);
    zos.putNextEntry(zipEntry);

    if
(isDirectory) {
        File[] child = f.listFiles();
        //ricorsione per ogni figlio
        for(int i = 0; i < child.length; i++)
            compress(child[i], nextPath, zos);
       
    } else if(f.isFile()) {
        FileInputStream fis = new FileInputStream(f);
        byte[] readBuffer = new byte[4096];
        int bytesIn = 0;
     
     //insert del file nell'ultima zipEntry dello ZipOutputStream 
        while ((bytesIn = fis.read(readBuffer)) != -1)
            zos.write(readBuffer, 0, bytesIn);
     
        fis.close();
   }
 }
}



La classe di Test:

package compressione;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipOutputStream;


public class TestCompress {

public static void main(String[] args) throws IOException {

    ZipOutputStream zos =
                new ZipOutputStream(
                    new BufferedOutputStream(
                        new FileOutputStream("C:\\allegato.zip")));

    //cartella da comprimere
    File f = new File("C:\\test");

    File[] listaFiles = f.listFiles();

    for(int i=0; i < listaFiles.length; i++){
        File currFile = listaFiles[i];
        File currZip = new File("C:\\allegato.zip");
        Compress.compress(currFile, "", zos);
    }
   
    zos.close();
 }
}

Controllate nel vostro Hard Disk C:\, se trovate allegato.zip fateci un bel doppio click e provate ad aprire un file contenuto al suo interno. Se si apre siete riusciti a creare il vostro mini WinZip.


Se siete interessati anche alla decompressione, potete leggere questo post.


Commenti

Post popolari in questo blog

Arrotondamento e troncamento in Java

Eclipse: Shortcuts (scorciatoie) da tastiera

Strutture dati: List, Set, Map

Creare un eseguibile Java