lunes, 19 de abril de 2010

Zip en java: Comprimir archivos y/o directorios

Ejemplo claro y conciso para hacer un archivo zip con las librerias de java. El siguente código sirve también para hacer un archivo zip de un directorio con todo su contenido, el cual es agregado de manera recursiva.

A continuación copio y pego el código tal cual pero agrego el enlace de donde lo recuperé.
import java.io.*;
import java.util.zip.*;

/**
 * Compresses a file or directory into a Zip archive. Users of the
 * class supply the name of the file or directory as an argument.
 */
public class SimpleZip {

   private static ZipOutputStream zos;

   public static void main(String[] args) {
      //User must specify a directory to compress      




if (args.length < 1) {
         System.out.println("Usage: java SimpleZip directoryName");
         System.exit(0);
      }
      //Get the name of the file or directory to compress.      




String fileName = args[0];
      //Use the makeZip method to create a Zip archive.


try {
         makeZip(fileName);
      }
      //Simply print out any errors we encounter.


catch (Exception e) {
         System.err.println(e);
      }
   }

   /**
    * Creates a Zip archive. If the name of the file passed in is a
    * directory, the directory's contents will be made into a Zip file.
    */
   public static void makeZip(String fileName)
         throws IOException, FileNotFoundException
   {
      File file = new File(fileName);
      zos = new ZipOutputStream(new FileOutputStream(file + ".zip"));
      //Call recursion.


recurseFiles(file);
      //We are done adding entries to the zip archive,


//so close the Zip output stream.


zos.close();
   }

   /**
    * Recurses down a directory and its subdirectories to look for
    * files to add to the Zip. If the current file being looked at
    * is not a directory, the method adds it to the Zip file.
    */
   private static void recurseFiles(File file)
      throws IOException, FileNotFoundException
   {
      if (file.isDirectory()) {
         //Create an array with all of the files and subdirectories         
 //of the current directory.
String[] fileNames = file.list();
         if (fileNames != null) {
            //Recursively add each array entry to make sure that we get
           //subdirectories as well as normal files in the directory.
            for (int i=0; i<filenames.length; i++){ 
  recursefiles(new File(file, fileNames[i]));
            }
         }
      }
      //Otherwise, a file so add it as an entry to the Zip file.      
else {
         byte[] buf = new byte[1024];
         int len;
         //Create a new Zip entry with the file's name.         


ZipEntry zipEntry = new ZipEntry(file.toString());
         //Create a buffered input stream out of the file         


//we're trying to add into the Zip archive.         


FileInputStream fin = new FileInputStream(file);
         BufferedInputStream in = new BufferedInputStream(fin);
         zos.putNextEntry(zipEntry);
         //Read bytes from the file and write into the Zip archive.         


while ((len = in.read(buf)) >= 0) {
            zos.write(buf, 0, len);
         }
         //Close the input stream.         


         in.close();
         //Close this entry in the Zip stream.         


        zos.closeEntry();
      }
   }
}

El método que hace toda la magia es makeZip(String fileName) el cual hace un archivo zip de nombre fileName+".zip" del respectivo archivo o directorio.

Agrego aquí el link donde se recupera esta pieza de codigo, además de que hace una explicación de el uso de las librerias zip y gzip en java. Clic aqui (Ahora pide que te registres para poder acceder al artículo). 

Algo con lo que he tenido complicación es en crear un archivo jar usando estas librerías, no he encontrado como hacer un jar que sea reconocido al momento de agregarlo al classpath y ejecutar la aplicación java, si alguien tiene algún ejemplo al respecto le agradecería cualquier comentario.

Pazzzzzz

viernes, 9 de abril de 2010

Google .... un nuevo significado para la red


Buzzeando, googleando, gmail, bloggear, picasa, google maps, google Earth, google docs, google news, google Chrome, google Chrome OS.. ¡google for everything!...

No hace mucho salió la herramienta Buzz de Gmail que hace un intento por socializar Gmail y pretende competir con redes sociales como Facebook y Twitter.

Google, como todos podemos observar poco a poco esta acaparando más y más tópicos y contextos, no solo en la red, sino en otros ámbitos tecnológicos como la telefonía móvil entre otras.

Mi opinión al respecto es que simplemente son herramientas que nos hacen la vida más fácil sin duda, con aplicaciones que podemos usar para cualquier actividad diaria, pero, con tanta información que nosotros mismos dejamos para Google (pensando en Google como una corporación de principios benéficos) que tan difícil puede ser que se pase al lado oscuro y no saque algún provecho de toda la información. Al final de cuentas ahí esta, y no podemos asegurar ni una cosa ni la otra, así que solo el tiempo nos lo podrá contestar, por lo mientras, creo que seguimos en la ruta en que Google se hace más y más importante para nuestras cibernéticas vidas, y así mismo, para nuestras mismas vidas... jaja.

A continuación incluyo algunos comentarios de usuarios que se han planteado este tipo de preguntas rescatados de este foro , que a manera personal me parecieron interesantes puntos de vista.

"El peligro informático de Google (técnico) es exactamente igual que el peligro social de cualquier régimen absolutista, vulgo dictadura: sus objetivos pueden ser muy buenos, pero a la larga se convierten en simple tiranía, como ha ocurrido con Microsoft en otros terrenos. Es muy cómodo, rápido, amplio, una gran ayuda para el que escribe, estudia o simplemente quiere buscar algo. ¡Ojala se mantenga así, pero lo dudo! La tentación del poder es muy grande y comienzan las injusticias económicas o sociales"
Romel H. Zell Madrid

"Google es la única agencia fachada del gobierno de USA adjunta al NSA (Agencia Nacional de Seguridad) que esta produciendo dividendos,no solo del punto de vista financiero sino desde la función con que fue originalmente creada,que no es otra que recopilar información personal de la mayor cantidad de individuos posible tanto dentro como fuera del país. O que creen ustedes que los gigantescos servidores que la operan son gratuitos? solo preguntense donde esta la publicidad que la sostiene? Cuidado!!!!"
Leo Contreras portland

"Llegará hasta su propia destrucción,empezando por fracturarse en varias empresas secundarias. Lo desgraciado del sistema capitalista es que la competencia obliga a expandirse para sobrevivir, y esto termina en un monopolio total en donde los más débiles son absorbidos; de la concentración se pasa al abuso de poder, y de allí a la tiranía. La información es la esencia misma del poder, sin ésta no existiría.¿Ventajas? Para los poderosos todas, para los demás: cero. Los negocios no son filantropía."
Armando Bronca Sydney



Realmente ¿qué pretende Google?, ¿es en realidad una solución  cibernética para todos nuestros problemas? ¿O parte de ese plan maquiavélico para conquistar el mundo? Espero sus opiniones estimados javeros y no javeros.


pazzzz