Leer los archivos JAR

(Febrero de 2005)

Crear archivos JAR

Los archivos JAR (Java Archive) son la forma sencilla y eficiente de transportar recursos. Con un archivo JAR facilitamos la distribución e instalación de una gran variedad de archivos, applets, video, sonido, imágenes, texto, etc. Además un archivo JAR puede contener firmar digitales que aseguran la integridad y autenticidad de los datos.

Para las clases (.class) la utilidad es doble: puede empaquetar sus clases y colocar el archivo JAR en el CLASSPATH. Además puede poner sus applets en un JAR y señalar dicho archivo en el parámetro ARCHIVE de la etiqueta APPLET de HTML. La compresión JAR es del tipo ZLIB.

En el siguiente ejemplo empaquetamos archivos de sonido en un archivo JAR por medio de la utilidad jar que viene con el JDK. Para crear el archivo JAR:


	jar -cvf sonidos.jar adagio_barber.mid ....[el resto de archivos que se incluyen]

Para visualizar las entradas (archivos) que están en el JAR:


	jar -tvf sonidos.jar

Que nos muestra por pantalla:


        0 Thu Apr 22 17:50:32 CEST 2004 META-INF/
      71 Thu Apr 22 17:50:32 CEST 2004 META-INF/MANIFEST.MF
  8232 Thu Apr 22 17:13:40 CEST 2004 adagio_barber.mid
  9085 Mon Mar 29 05:03:12 CEST 2004 canon_pachelbel.mid
29070 Sat Mar 13 03:44:16 CET 2004 highway40blues.mid
10889 Thu Apr 22 17:38:06 CEST 2004 ghost_riders_in_the_sky.mid

MANIFEST.MF, situado en el directorio META-INF, es un archivo de información sobre versiones y control. Para nuestro caso no será necesario que lo utilicemos. Si quisiéramos extraer el contenido usaríamos:


	jar -xvf sonidos.jar

Extraer información del archivo JAR

Vamos a plantear un applet de ejemplo, que tiene un archivo JAR con los siguientes contenidos:

El applet lo puede ver más abajo. En la parte superior aparece una lista que contiene información sobre el archivo JAR y las entradas del archivo. En la parte inferior puede ver la imagen contenida en el JAR (si no la ve bien, presione 'Actualizar').

Respecto a las URLs lo más importante es entender que:


	jar:http://www.proactiva-calidad.com/java/archivos/jar/pack.jar!/ (archivo JAR)
	jar:http://www.proactiva-calidad.com/java/archivos/jar/pack.jar!/canon_pachelbel.mid (archivo audio)	

Para la extracción del archivo .class el proceso es automático. Lo único que hay que hacer es indicar su nombre en el parámetro ARCHIVE de la etiqueta APPLET de HTML:


	code="docen_archivos.applet_jar.class"
	archive="jar/pack.jar"

Respecto a la extracción y reproducción de los archivos de audio o imagen hay que cumplir con varios pasos:

  1. Primero, hay que crear una URL de cada uno de los archivos contenidos:
  2. 
    	 URL url_audio = new URL( "jar:" + getCodeBase().toString() + "jar/pack.jar!/canon_pachelbel.mid" );
    	 URL url_imagen = new URL( "jar:" + getCodeBase().toString() + "jar/pack.jar!/buho.gif" );
    
  3. A partir de la URL obtener el objeto imagen (clase Image) y audio (AudioClip):
  4. 
    	 audio = getAppletContext().getAudioClip( url_audio ); // Consigo un AudioClip
    	 imagen = this.getImage( url_imagen );                  // Consigo un Image
    	
  5. La reproducción de la imagen es un asunto sencillo que ya hemos tratado. Lo esencial es llamar a drawImage():
  6. 
       public void paint(Graphics g) {
          Rectangle rec = g.getClipBounds();
          int ancho_imagen = imagen.getWidth( this );
          int alto_imagen = imagen.getHeight( this );
          g.drawImage( imagen, rec.width/2 - ancho_imagen/2, rec.height/2, this );
       }
    	
  7. El archivo de audio se reproduce de manera simple:
  8. 
    	audio.play();
    	

El lector podría poner una objeción: en este ejemplo ya sabiamos lo que contiene el archivo JAR, en especial ya conociamos los nombres y extensiones de los archivos de audio e imagen. Pero puede darse el caso de que no lo conozcamos previamente, supongamos que necesitamos listar todos los archivos de audio y no sabemos sus nombres. Hay una solución para esto, que de forma breve se denomina "obtener las entradas de un archivo JAR". Los pasos a seguir:

Tiene acceso al código fuente

Volver al índice