Al igual que en el ejemplo anterior, a continuación se muestra un ejemplo completo con todas las funcionalidades del paquete zipfile:

  • Crear un nuevo fichero ZIP.
  • Añadir entradas a este fichero.
  • Extraer las entradas del fichero ZIP.
  • Mostrar información de cada una de las entradas.

1 Creación de archivos absolutos

Copy
<xsql-script name='zipentry_generation_absolute'>
    <body>
 
        <set name='m_path'>c:\tmp</set>
 
        <set name='m_textfile'>
            <string><m_path /><file.separator />primerFichero.txt</string>
        </set>
 
        <set name='m_imgfile'>
            <string><m_path /><file.separator />segundoFichero.txt</string>
        </set>
 
        <set name='m_pdffile'>
            <string><m_path /><file.separator />tercerFichero.txt</string>
        </set>
 
		<file.bytes.write>
            <file name='#m_textfile' type='absolute'  />
            <string.getBytes>Esto es un fichero de texto</string.getBytes>
        </file.bytes.write>
 
        <file.bytes.write>
            <file name='#m_imgfile' type='absolute' />
            <string.getBytes>Esto es otro fichero de texto</string.getBytes>
        </file.bytes.write>
 
        <file.bytes.write>
            <file name='#m_pdffile' type='absolute' />
            <string.getBytes>Esto es un tercer fichero de texto</string.getBytes>
        </file.bytes.write>
 
        <array name='a_names'>
            <string>primerFichero.txt</string>
            <string>segundoFichero.txt</string>
            <string>tercerFichero.txt</string>	
        </array>
 
        <!-- Generates a ZIP File -->
        <println />
        <println />
        <println>Generating ZIP file...</println>
        <set name='m_zout'>
            <zipfile.getZipOutputStream>
                <file name='${m_path}\testZip.zip' type='absolute' />
            </zipfile.getZipOutputStream>    
        </set>       
        <println>m_path : <m_path/></println>
        <println>ZipOutputStream created</println>      
        <println/>
 
<!-- Append to the zipOutputStream the files to archive-->
 
        <iterator name='fname'>
            <in>
                <a_names />
            </in>
 
            <do>
                <set name='count'>
                <zipfile.append name='${fname}'>
                    <m_zout />
                    <file name='${m_path}\${fname}' />
                </zipfile.append>
                </set>
                <println>File added   : <fname/></println>
                <println>Bytes written: <count/></println>
                <println/>
            </do>
        </iterator>     
 
        <!-- Close the zipOutputStream, it's absolutely necessary --> 
        <zipfile.close>
            <m_zout />
        </zipfile.close>
        <println>ZipOutputStream closed</println>
 
        <!-- 
        Read a zip file and iterate across all entries
        -->
        <println /><println />
        <println>Reading ZIP file...</println>
        <set name='m_zipfile'>
            <zipfile>
                <file name='${m_path}\testZip.zip' type='absolute'></file>                     
            </zipfile>
        </set>
 
        <iterator name='m_entry'>
            <in>
                <zipfile.getEntries>
                    <m_zipfile />
                </zipfile.getEntries>
            </in>
            <do>
                <println/>
                <println>Entry name: <zipentry.getName><m_entry /></zipentry.getName></println>
                <println>Base name : <zipentry.getBaseName><m_entry /></zipentry.getBaseName></println>
                <println>  size    : <zipentry.getSize><m_entry /></zipentry.getSize></println>
                <println>  time    : <zipentry.getTime><m_entry /></zipentry.getTime></println>
                <println>  is dir  : <zipentry.isDirectory><m_entry /></zipentry.isDirectory></println>
                <println>Bytes read: <zipentry.getBytes><m_zipfile/><m_entry /></zipentry.getBytes></println>
            </do>
        </iterator>
 
        <println/><println/>        
 
    </body>
</xsql-script>

Genera la siguiente salida:

Copy
Generating ZIP file...
m_path : c:\tmp
ZipOutputStream created
 
File added   : primerFichero.txt
Bytes written: 27
 
File added   : segundoFichero.txt
Bytes written: 29
 
File added   : tercerFichero.txt
Bytes written: 34
 
ZipOutputStream closed
 
 
Reading ZIP file...
 
Entry name: primerFichero.txt
Base name : primerFichero
  size    : 27
  time    : 1413369966000
  is dir  : false
Bytes read: Esto es un fichero de texto
 
Entry name: segundoFichero.txt
Base name : segundoFichero
  size    : 29
  time    : 1413369966000
  is dir  : false
Bytes read: Esto es otro fichero de texto
 
Entry name: tercerFichero.txt
Base name : tercerFichero
  size    : 34
  time    : 1413369966000
  is dir  : false
Bytes read: Esto es un tercer fichero de texto