HTMLpointHTMLpoint HTMLpoint.com


 El paquete java.util



En esta lección veremos la parte de java.util que trata de los utilísimos archivos .zip e i .jar
Empezamos viendo java.util.zip
Los archivos .zip son archivos que contienen unos archivos comprimidos y varios programas. Se utilizan sobre todo para cambiar datos en internet porque reducen notablemente los tamaños.
Hay varios tipos de archivos comprimidos y varios programas para comprimir y ampliar los datos, pensemos en los archivos RAR, en los CAB de Windows, en los ARJ. Este paquete nos da la posibilidad de tratar datos comprimidos según los estándars ZIP y GZIP, que utilizan el algoritmo de compresión llamado DEFLATE. este paquete incluye también utility que controlan los códigos checksum CRC-32 y Adler-32 de un flujo arbitrario de entrada.
¿Para qué usar este paquete? Las razones son muchas. En primer lugar, los programas Java que incluyen imágenes, animaciones y sonidos, pueden ser realmente grandes y es posible crear un archivo .ZIP con todos los archivos necesarios para que funcione. De esta forma se disminuye el tamaño del mismo. Pero, para que se puedan utilizar por el programa, primero tienen que descomprimirse y este paquete nos ofrece esta posibilidad. Otra razón para usar este paquete es que la compresión de datos en informática es un problema bastante complejo. En esta operación se utilizan unos algoritmos que se basan en el álgebra de los números, tema no muy conocido fuera de las facultades de Ciencias. Por esta razón, son unos algoritmos bastantes incomprensibles para los que no tienen práctica en el asunto. Este paquete ofrece la posibilidad a todo el mundo de comprimir y ampliar estos datos.
Veamos, entonces, lo que incluye el paquete java.util.zip

Interfaces

Checksum, es un interfaz que representa el código checksum de los datos.

Clases

CheckedInputStream, es un flujo de entrada que trata también el checksum de los datos de entrada.
CheckedOutputStream, es un flujo de salida que trata también el checksum de los datos en salida.
CRC32, clase usada para calcular el código checksum de tipo CRC-32 de un flujo de datos.
Deflater, clase que se ocupa de las compresiones de los datos utilizando la compresión según la biblioteca
ZLIB.
DeflaterOutputStream, flujo de salida que comprime los datos utilizando el algoritmo Deflate.
GZIPInputStream, filtro para el stream de ingreso para leer datos comprimidos según el formato
GZIP.
GZIPOutputStream, filtro para el flujo de salida para escibir datos con el código zip utilizando GZIP.
Inflater, soporte para la compresión de tipo ZLIB.
InflaterInputStream, filtro para el flujo de entrada, para ampliar datos comprimidos según
el algoritmo Deflate.
ZipEntry, utilizada para representar un archivo de entrada de tipo ZIP.
ZipFile, utilizada para leer el contenido de un archivo ZIP.
ZipInputStream, utilizada para leer los archivos contenidos en un archivo ZIP.
ZipOutputStream, utilizada para escibir datos comprimidos de formato ZIP.

Excepciones

DataFormatException, error de formato de los datos.
ZipException

Cada una de estas clases tendrá sus métodos. Para conocerlos todos os remito a la documentación del JDK porque sólo analizaremos algunos con un pequeño ejemplo.
El siguiente programa abre el directorio en el que se encuentra y busca todos los archivos .zip, por cada archivo que encuentra y mira el contenido.

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


public class ReadZip
{

public static void main(String [] a)
{
File dir=new File(".");

System.out.println("Abro el directorio "+dir.getAbsolutePath());

File[] cont=dir.listFiles();

ent MAX=cont.length;

for (ent e = 0; i {
String tmp=cont[i].getName();

if ((tmp.endsWith(".zip"))||(tmp.endsWith(".ZIP")))
{
// es un archivo .zip

System.out.println("He encontrado "+tmp);

controlaZip(cont[i]);

};
}


}

public static void controlaZip(File f)
{

System.out.println("Contenido del archivo "+f.getName());

ZipFile Zf;
try {Zf=new ZipFile(f);}
catch (ZipException e){Zf=null;}
catch (IOException e1){Zf=null;}
;

Enumeration files=Zf.entries();

while(files.hasMoreElements())
System.out.println(files.nextElement());


}


}

Además podemos ampliar estos archivos. El siguiente programa recoge todos los .zip del directorio donde se pone en marcha y los amplia.

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


public class Decomp
{

public static void main(String [] a)
{
File dir=new File(".");

System.out.println("Abro el directorio "+dir.getAbsolutePath());

File[] cont=dir.listFiles();

ent MAX=cont.length;

for (ent e = 0; i<MAX; e++)
{
String tmp=cont[i].getName();

if ((tmp.endsWith(".zip"))||(tmp.endsWith(".ZIP")))
{
// es un archivo .zip

System.out.println("He encontrado "+tmp);

try {controlaZip(cont[i]);}
catch (IOException e){};

};
}


}

public static void controlaZip(File f) throws IOException
{

System.out.println("Ampliación del archivo "+f.getName()+":");

ZipFile Zf;
try {Zf=new ZipFile(f);}
catch (ZipException e){Zf=null;}
catch (IOException e1){Zf=null;}
;

Enumeration files=Zf.entries();

while(files.hasMoreElements())
{
ZipEntry tmpFile=(ZipEntry ) files.nextElement();

System.out.println("amplio el archivo "+tmpFile.getName());

System.out.println("tamaño comprimido "+
tmpFile.getCompressedSize()+" tamaño no comprimido "+
tmpFile.getSize()+" CRC "+tmpFile.getCrc());

System.out.println("modificado "+tmpFile.getTime());

InputStream in= Zf.getInputStream(tmpFile);

FileOutputStream out= new FileOutputStream(tmpFile.getName());


for (ent ch=in.read();ch!=-1;ch=in.read()) out.write(ch);


out.close();

in.close();

}

}


}

El paquete java.util.jar se pone a disposición del programador de las clases y de los interfaces para tratar los archivos de tipo Java Archive (JAR), sobre todo es posible leerlos y escribirlos. Los archivos JAR se basan en el estándar ZIP, con un archivo opcional llamado manifest .
El contenido del paquete es el siguiente:

Clases
Attributes
Attributes.Name
JarEntry
JarFile
JarInputStream
JarOutputStream
Manifest

Excepciones
JarException
Os remito a la documentación del JDK para más información.


  Volver al inicio de la página