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