Esempio di decompressione di un file Java

Benvenuti all’esempio di scompattazione di file Java. Nel post precedente, abbiamo appreso come zippare file e directory in Java, qui scompatteremo lo stesso file zip creato dalla directory in un’altra directory di output.

Java Unzip File

Per scompattare un file zip, dobbiamo leggere il file zip con ZipInputStream e quindi leggere tutte le ZipEntry una per una. Successivamente, utilizzeremo FileOutputStream per scriverle nel sistema di file. Dovremo anche creare la directory di output se non esiste e le eventuali directory nidificate presenti nel file zip. Ecco il programma Java per scompattare il file zip creato in precedenza, tmp.zip, nella directory di output.

package com.journaldev.files;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class UnzipFiles {

    public static void main(String[] args) {
        String zipFilePath = "/Users/pankaj/tmp.zip";
        
        String destDir = "/Users/pankaj/output";
        
        unzip(zipFilePath, destDir);
    }

    private static void unzip(String zipFilePath, String destDir) {
        File dir = new File(destDir);
        // crea la directory di output se non esiste
        if(!dir.exists()) dir.mkdirs();
        FileInputStream fis;
        // buffer per leggere e scrivere dati nel file
        byte[] buffer = new byte[1024];
        try {
            fis = new FileInputStream(zipFilePath);
            ZipInputStream zis = new ZipInputStream(fis);
            ZipEntry ze = zis.getNextEntry();
            while(ze != null){
                String fileName = ze.getName();
                File newFile = new File(destDir + File.separator + fileName);
                System.out.println("Unzipping to "+newFile.getAbsolutePath());
                // crea directory per sottodirectory nel file zip
                new File(newFile.getParent()).mkdirs();
                FileOutputStream fos = new FileOutputStream(newFile);
                int len;
                while ((len = zis.read(buffer)) > 0) {
                fos.write(buffer, 0, len);
                }
                fos.close();
                // chiudi questa ZipEntry
                zis.closeEntry();
                ze = zis.getNextEntry();
            }
            // chiudi l'ultima ZipEntry
            zis.closeEntry();
            zis.close();
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }

}

Una volta completato il programma, avremo tutti i contenuti del file zip nella cartella di output con la stessa gerarchia di directory. L’output del programma sopra è:

Unzipping to /Users/pankaj/output/.DS_Store
Unzipping to /Users/pankaj/output/data/data.dat
Unzipping to /Users/pankaj/output/data/data.xml
Unzipping to /Users/pankaj/output/data/xmls/project.xml
Unzipping to /Users/pankaj/output/data/xmls/web.xml
Unzipping to /Users/pankaj/output/data.Xml
Unzipping to /Users/pankaj/output/DB.xml
Unzipping to /Users/pankaj/output/item.XML
Unzipping to /Users/pankaj/output/item.xsd
Unzipping to /Users/pankaj/output/ms/data.txt
Unzipping to /Users/pankaj/output/ms/project.doc

Ecco tutto sull’esempio di scompattazione di file Java.

Source:
https://www.digitalocean.com/community/tutorials/java-unzip-file-example