Bienvenido al ejemplo de descompresión de archivos Java. En el último artículo, aprendimos cómo comprimir archivos y directorios en Java, aquí descomprimiremos el mismo archivo zip creado desde un directorio a otro directorio de salida.
Descompresión de archivos Java
Para descomprimir un archivo zip, necesitamos leer el archivo zip con ZipInputStream
y luego leer todas las ZipEntry
una por una. Luego, utilizamos FileOutputStream
para escribirlas en el sistema de archivos. También necesitamos crear el directorio de salida si no existe y cualquier directorio anidado presente en el archivo zip. Aquí está el programa de descompresión de archivos Java que descomprime el archivo tmp.zip
creado anteriormente en el directorio de salida.
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 el directorio de salida si no existe
if(!dir.exists()) dir.mkdirs();
FileInputStream fis;
// búfer para leer y escribir datos en el archivo
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 directorios para subdirectorios en el 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();
// cierra esta ZipEntry
zis.closeEntry();
ze = zis.getNextEntry();
}
// cierra la última ZipEntry
zis.closeEntry();
zis.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Una vez que el programa finalice, tendremos todos los contenidos del archivo zip en la carpeta de salida con la misma jerarquía de directorios. El resultado del programa anterior es:
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
Eso es todo sobre el ejemplo de descompresión de archivos Java.
Source:
https://www.digitalocean.com/community/tutorials/java-unzip-file-example