Dal forum della sun:

codice:
import java.io.*;
import java.util.*;
import java.util.zip.*;


public class Zipping {

  public static ArrayList unzip(InputStream inputStream, String destinationDir) throws IOException {
        ArrayList result = null;

        final int BUFFER = 2048;

        if (inputStream != null && destinationDir != null) {
            result = new ArrayList();
            ZipInputStream zis = null;
            BufferedOutputStream bos = null;
            try {
                zis = new ZipInputStream(new BufferedInputStream(inputStream));
                ZipEntry entry = null;
                while((entry = zis.getNextEntry()) != null) { //for each zip entry
                    if (entry.isDirectory()) { //directory
                        File dir = new File(destinationDir + File.separator + entry.getName());
                        dir.mkdirs();
                    } else { //file
                        int count;
                        byte data[] = new byte[BUFFER];
                        String fileName = destinationDir + File.separator + entry.getName();
                        FileOutputStream fos = new FileOutputStream(fileName);
                        bos = new BufferedOutputStream(fos, BUFFER);
                        while ((count = zis.read(data, 0, BUFFER)) != -1) {
                            bos.write(data, 0, count);
                        }
                        bos.flush();
                        result.add(fileName);
                    }
                }//next zip entry
                zis.close();
            } finally {
                if (bos != null) { try { bos.close(); } catch (IOException ioe) { /* ignore */ } }
                if (zis != null) { try { zis.close(); } catch (IOException ioe) { /* ignore */ } }
            }
        }//else: input value unavailable

        return result;
    }//unzip()


    public static void main (String[] args) {
      if (args.length != 2) {
        System.out.println("Uso: java Zipping File.ZIP Cartella_di_Destinazione");
        System.exit(0);
      }
      else {
        try {
          unzip(new FileInputStream(args[0]), args[1]);
        }
        catch (Exception e) {
          e.toString();
        }
      }
    }