Descomprimir archivos comprimidos Zip usando las librerías nativas de java.
import java.io.*;import java.util.zip.*;
public class UnZip {
final int BUFFER = 2048;
public static void main (String argv[]) {
try {
BufferedOutputStream dest = null;
FileInputStream fis = new FileInputStream(argv[0]);
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
ZipEntry entry;
while((entry = zis.getNextEntry()) != null) {
System.out.println("Extracting: " +entry);
int count;
byte data[] = new byte[BUFFER];
// write the files to the disk
FileOutputStream fos = new FileOutputStream(entry.getName());
dest = new BufferedOutputStream(fos, BUFFER);
while ((count = zis.read(data, 0, BUFFER)) != -1) {
dest.write(data, 0, count);
}
dest.flush();
dest.close();
}
zis.close();
} catch(Exception e) {
e.printStackTrace();
}
}}
Gracias por el codigo, pero te remito un bugA la hora de descomprimir un archivo zip con carpetas da una excepcion.Esa excepcion se puede eliminar modificando el codigo en la linea 18 reemplazando con esto:String rutaarchivo=entry.getName();int index=rutaarchivo.lastIndexOf(‘/’);rutaarchivo=rutaarchivo.substring(index+1);FileOutputStream fos = new FileOutputStream(rutaarchivo);
asi mejor:if(!entry.isDirectory()){String rutaarchivo=entry.getName();int index=rutaarchivo.lastIndexOf(‘/’);rutaarchivo=rutaarchivo.substring(index+1);//System.out.println(«test2: «+ carlos);FileOutputStream fos = new FileOutputStream(rutaarchivo);…}
Oye disculpas la ingnorancia, pero en donde queda almacenada la informacion que fue extraida porq no la encuentro..Ayuda
en el Classpath de tu proyecto
Como quedaria el codigo entonces??
Os dejo el código modificado para que funcione.
Un saludo
import java.io.*;
import java.util.zip.*;
/**
*
* @author seni
*/
public class prueba {
final static int BUFFER = 2048;
public static void main (String []args)
{
try {
File dirDestino = new File(«prueba»);
BufferedOutputStream dest = null;
FileInputStream fis = new FileInputStream(«C:\\temp\\gestdb_2.4.000.zip»);
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
FileOutputStream fos = null;
ZipEntry entry;
int count;
int index = 0;
byte data[] = new byte[BUFFER];
String rutaarchivo = null;
while((entry = zis.getNextEntry()) != null) {
System.out.println(«Extracting: » +entry);
rutaarchivo = entry.getName();
// tenemos que quitar el primer directorio
index = rutaarchivo.indexOf(«/»);
rutaarchivo = rutaarchivo.substring(index+1);
if(rutaarchivo.trim().length() > 0)
{
// write the files to the disk
try {
dest = null;
File fileDest = new File(dirDestino.getAbsolutePath() + «/» + rutaarchivo);
if(entry.isDirectory())
{
fileDest.mkdirs();
}
else
{
if(fileDest.getParentFile().exists() == false)
fileDest.getParentFile().mkdirs();
fos = new FileOutputStream(fileDest);
dest = new BufferedOutputStream(fos, BUFFER);
while ((count = zis.read(data, 0, BUFFER)) != -1)
{
dest.write(data, 0, count);
}
dest.flush();
}
} finally {
try { if(dest != null) dest.close(); } catch(Exception e) {;}
}
}
}
zis.close();
} catch(Exception e) {
e.printStackTrace();
}
}
}
Hola Seni he estado checando tu codigo, soy nueva en esto, lo ejecute pero no me descmprime ningun archivo, esto es lo que dice al momento de ejecutarlo:
java.io.FileNotFoundException: C:\Users\ssdscj1\Downloads\MBE-PSA[1].zip (3) (El sistema no puede encontrar el archivo especificado)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.(FileInputStream.java:138)
at java.io.FileInputStream.(FileInputStream.java:97)
at decomprimir.Decomprimir.main(Decomprimir.java:19)
Alguna sugerencia
Es una excepción, que salta porque no encuentra el archivo.
Intenta ponerle un nombre al archivo que no contenga caracteres extraños.
hola, necesito comprimir un archivo xml a formato zip y dividirlo en volúmenes de 150 MB. Habría alguna manera de hacerlo? Gracias!!
No estoy seguro de si se puede automatizar el comprimir con los tamaños que comentas.
Por lo que estuve buscando hasta ahora, no encuentro la manera de hacerlo. Seguiré buscando