Ir al contenido principal

Abrir archivos de cualquier tipo desde Java

En esta ocasión voy a tocar un tema que desde mi punto de vista es muy interesante, se trata de cómo abrir archivos de cualquier tipo desde Java. Si tienes algo de experiencia en el tema, sabrás que existe una manera de hacerlo ejecutando un comando de consola desde Java, o incluso con el comando Runtime.getRuntime().exec(rutaArchivo), sin embargo, a partir de Java 6 tenemos la clase java.awt.Desktop que nos permite interactuar con las aplicaciones preferidas del sistema operativo.
Lo que podemos realizar al utilizar esta clase es lo siguiente:
  • Abrir una dirección web en el navegador web por defecto.
  • Abrir el cliente de correo por defecto con datos específicos de un correo saliente como el destinatario, mensaje, cc, etc.
  • Abrir, editar o imprimir algún archivo por medio de su aplicación configurada para dicha acción por defecto.

Se me ocurre por ejemplo que después de que el cliente corra la aplicación que desarrollamos por primera vez le mande a nuestro sitio en internet, o incluso colocar la ayuda de la misma en un servidor web, etc.

Debemos tomar en cuenta que en ocasiones tenemos una aplicación configurada para abrir los archivos y alguna otra para editarlos, por ejemplo, puede ser que las imágenes las veamos en Picasa y las editemos con Photoshop o algo por el estilo.

Teniendo claro la función de la clase java.awt.Desktop pasemos a un ejemplo de su utilización.

Aplicación EjemploClaseDesktop.jar creado en NetBeans 6.1

En primera instancia creé un nuevo proyecto con el nombre EjemploClaseDesktop.jar y agregué un nuevo JFrame, posteriormente agregué paneles, campos de texto, botones y radio botones de manera que quedara de la siguiente manera:


Una vez creado el JFrame, agregué las siguientes variables globales:

Desktop d; //Para realizar los procedimientos
File archivo; //Para almacenar el archivo a abrir, editar o imprimir

y al constructor se le agregó el siguiente código...


/*Establece el título de la ventana*/
setTitle("Ejemplo java.awt.Desktop");
/*Posiciona la ventana en el centro de la pantalla*/
setLocationRelativeTo(null);
setVisible(true);
        
/*Obtiene una instancia del escritorio*/
d = Desktop.getDesktop();

/*Verifica que el ambiente del SO soporte los procedimientos*/
if(d.isDesktopSupported()){
   /*si es así habilita los campos*/
   habilitarCampos(true);
}else{
   /*de lo contrario muestra un error e inhabilita los campos*/
   JOptionPane.showMessageDialog(this, "El sistema no soporta los procedimientos.", "Error", JOptionPane.ERROR_MESSAGE);
   habilitarCampos(false);
}



En el código anterior se puede notar que antes de realizar cualquier procedimiento es recomendable verificar si el ambiente actual soporta los procedimientos a realizar (esto a través del método isDesktopSupported()), de ser así se habilitan los campos contenidos en la ventana.

Navegación web::
Una vez hecho lo anterior agregamos el evento al botón Ir del panel Web y escribimos el siguiente código:

     /*si no se ha escrito nada en el campo de texto*/
if(txweb.getText().equals("")){
   JOptionPane.showMessageDialog(this, "No has escrito una dirección", "Error", JOptionPane.ERROR_MESSAGE);
   txweb.requestFocusInWindow();
   return;
}
try {
    d.browse(new URI(txweb.getText()));
} catch (Exception ex) {
   JOptionPane.showMessageDialog(this, "Error al verificar la dirección.", "Error", JOptionPane.ERROR_MESSAGE);
   return;
}

El método browse(URI) nos permite abrir el navegador web por defecto en el sistema operativo en la dirección indicada por un objeto URI, en este ejemplo es la dirección que se escribe en el campo de texto correspondiente.

Correo electrónico::
Para abrir el cliente de correo por defecto en el sistema con la dirección del destinatario indicada en el campo de texto se utiliza el siguiente código:

String mail = "mailto:"+txemailpara.getText();
try {
    d.mail(new URI(mail));
} catch (Exception ex) {
    Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
}


El método mail(URI) nos permite abrir el cliente de correo por defecto con los datos indicados por el objeto URI, existen muchas maneras de estructurar una dirección URI para correo de manera que podamos pasar el asunto del correo, CC, mensaje y demás, para mayor información te recomiendo darte una vuelta por este sitio.

Apertura, edición e impresión de archivos::
Ahora, para el manejo de archivos tenemos que agregar el evento tanto al botón de Examinar (para escoger el archivo) como al botón de Ok (para realizar la acción), el código del botón Examinar es el siguiente:

JFileChooser fc = new JFileChooser();
int resp = fc.showOpenDialog(this);

if(resp == JFileChooser.APPROVE_OPTION){
    archivo = fc.getSelectedFile();
    txarchivo.setText(archivo.getAbsolutePath());
}


En el código anterior se declara un nuevo objeto de la clase JFileChooser que nos permita navegar por las carpetas y localizar el archivo sobre el cual realizaremos la acción indicada, 
una vez que se selecciona el archivo se almacena en el objeto (de acceso global) tipo File de nombre archivo y se indica su ruta en el campo de texto correspondiente.

Al contar con un archivo sobre el cual trabajar podemos pasar al evento del botón Ok que realiza lo siguiente: 

if(archivo!=null){
    try{
        if(rdAbrir.isSelected()){
           d.open(archivo);
        }
        if(rdEditar.isSelected()){
           d.edit(archivo);
        }
        if(rdImprimir.isSelected()){
            d.print(archivo);
        }   
    }catch(Exception ex){
        JOptionPane.showMessageDialog(this, "Ocurrió un error al realizar la acción.", "Error", JOptionPane.ERROR_MESSAGE);
        return;
    }
}else{
    JOptionPane.showMessageDialog(this, "No has seleccionado el archivo.", "Error", JOptionPane.ERROR_MESSAGE);
    btnExaminar.requestFocusInWindow();
    return;
}


En el código anterior se verifica qué radio botón está seleccionado y se realiza la acción indicada, cabe mencionar que los 3 radio botones pertenecen al mismo grupo (ButtongGroup), el método open() abre el archivo indicado en la aplicación por defecto para dicha acción, edit() abre la aplicación por defecto para editar el archivo y print() imprime el archivo, de igual manera, a través de la aplicación por defecto del sistema.

Esto es todo con respecto a la clase java.awt.Desktop, el proyecto completo de NetBeans puedes descargarlo desde aquí

¿Alguna duda o algo qué decir? Deja tu comentario. Saludox

Comentarios

  1. Me parece un Excelente artículo, de suma utilidad, muchas gracias. Totalmente recomendable.

    ResponderBorrar
  2. Gracias por tu comentario Fernando. Saludox.

    ResponderBorrar
  3. te dejo mi correo es que tengo una duda sobre esto y necesito que me ayudes porqe estoy haciendo un proyecto gracias

    edwin7-91@hotmail.com

    ResponderBorrar
  4. me podrias enviar el programa a mi correo lo necesito.. por favor!!
    tlaco_2390@hotmail.com

    ResponderBorrar
  5. disculpa el link no funciona me podrias enviar el programa a mi correo por favor. me urge y gracias
    sakuradarkness@hotmail.com

    ResponderBorrar
  6. Me parece interesante tu articulo pero me podrias enviar el programa a mi correo por favor!!
    tonyocampoc@gmail.com

    ResponderBorrar
  7. Por favor, necesito que vuelvas a colgar el enlace, estoy haciendo el PFC y me hace falta importar un vídeo. Muchas gracias!!!

    ResponderBorrar
  8. hola men puedes mandarme el proyecto a mi correo ya no sirve desacargarlo porfavor mi correo es lito_s19@hotmail.com necesito estudiarlo para mi examen parcial de la universidad please

    ResponderBorrar
  9. Hola amigo, me puedes enviar el proyecto a mi correo:
    Locoxti_15_15_15@hotmail.com

    ResponderBorrar
  10. Oye amigo me puedes mandar a mi correo hectoranq@gmail.com

    ResponderBorrar
  11. Es posible determinar luego de abrir un browser si este fue cerrado usando Desktop?

    Es decir:

    java.awt.Desktop desktop = java.awt.Desktop.getDesktop();
    desktop.browse(java.net.URI.create(this.url));
    Luego quiero que mi aplicación java reaccione cuando se cierra el browser.

    Muchas gracias,

    ResponderBorrar
  12. camarada mi correo es anyelius_j-r@hotmail.com pasa el codigo se te agradeceria mucho

    ResponderBorrar
  13. Ya logre replicar el ejemplo.

    Solo tengo un detalle. Las variables globales a las que haces referencia:

    Desktop d;
    File archivo;

    En realidad no son globales, son locales a las clases respectivas donde se ocupan.

    Sólo así pude ejecutar tu ejemplo.

    De no ser así, te pediría indiques de que forma las pones para considerarlas globales.

    Mi correo es rusell_villegas@hotmail.com

    Agradecería tu comentario

    ResponderBorrar
  14. me podrias enviar el programa a mi correo lo necesito.. por favor!!
    aghuszfersystems@hotmail.com

    ResponderBorrar
  15. podrias mandame el archivo pofavor a mi correo:

    strikefreedom1625@yahoo.com

    ResponderBorrar
  16. Hola buenas tardes, me harias el favor de enviarme el proyecto a mi correo por que no lo pude bajar desde el enlace mi correo: pmansilla@outlook.com desde ya muchas gracias. Saludos

    ResponderBorrar
  17. Hola me puedes enviar el archivo porfavor no funciona el link, mi correo es fabian.dragoonred@gmail.com

    ResponderBorrar
  18. Gracias soy novato y me parece bueno tu artículo,

    ResponderBorrar

Publicar un comentario

Este es un espacio abierto, puedes escribir lo que gustes respetando los siguientes puntos:

1.- Lo que escribas esté relacionado con el post, si gustas contactarme puedes hacerlo aqui.

2.- Todo es cuestionable, aunque ten en cuenta que existen formas de hacerlo, evita las agresiones y revisa tu lenguaje antes de publicar un comentario.

3.- Siempre hay tres verdades: tu verdad, mi verdad y la verdad, por lo que opiniones diferentes no necesariamente son equivocadas.

4.- Los comentarios son una forma de discusión abierta, por lo que al publicar uno, implícitamente entras a una discusión, con todo lo que esto representa.

5. Me reservo el derecho de eliminar comentarios que no respeten las condiciones mencionadas anteriormente.

Toma en cuenta que puedes utilizar emoticones en tu comentario, para ver una lista de los disponibles da clic en este enlace.

Entradas más populares de este blog

3 sencillos pasos para tramitar la ayuda por desempleo de la AFORE

¿Tienes dinero ahorrado en tu AFORE y en este momento no estás trabajando o estás trabajando pero no tienes seguro social? Si respondiste sí a la pregunta anterior entonces hay una buena noticia para ti: puedes retirar una parte del dinero que tienes ahorrado. Y lo mejor, es muy sencillo. En este artículo te diré paso a paso qué hacer para obtener ese dinero, sin tecnicismos legales ni nada por el estilo, simple y sencillamente lo que necesitas saber. Paso Número 1: Obtener los últimos 2 estados de cuenta de tu Afore Esto en la mayoría de los casos es sumamente sencillo ya que dichos estados de cuenta llegan directamente al domicilio del ahorrador, si este es tu caso puedes saltar lo restante en este punto y continuar con el paso número 2, en caso contrario sigue leyendo… Si no tienes tus estados de cuenta debes ponerte en contacto con la empresa encargada de administrar tu ahorro para que te los proporcione, normalmente te van a pedir una identificación oficial, comprobante de

Conectar una base de datos en MySQL con NetBeans

NetBeans es una plataforma para el desarrollo de aplicaciones de escritorio usando Java y a un Entorno integrado de desarrollo (IDE) desarrollado usando la Plataforma NetBeans. Si eres un programador y desarrollas tus aplicaciones en Java seguramente necesitarás conectar una base de datos tipo MySQL a este entorno algún día, bueno, si lo necesitas ahora, he aquí una explicación paso a paso de cómo conectar ambas herramientas.

4 extraordinarias aplicaciones espía para Android

Le andas haciendo al James Bond y necesitas grabar video, voz o tomar fotos desde tu dispositivo Android sin ser notado? Aquí 4 excelentes aplicaciones que facilitarán tus hazañas de 007 en menos de lo que canta un gallo.

c606 c6nf5g4r6 e3 tec3ad6 [Como configurar el teclado]

¿Problemas al escribir con el teclado? ¿Tratas de escribir la letra ‘o’ y sale el número ‘6’ o algo por el estilo? La solución puede ser más simple de lo que parece. La solución a tu problema tras el salto...

Conexión, consulta y ejecución de sentencias en MySQL con Java

Anteriormente escribí este mismo artículo pero para bases de datos en Oracle . En este artículo prácticamente me copio y pego para explicar paso a paso cómo realizar la conexión a MySQL en Java, así como la forma de realizar consultas a los registros existentes y ejecutar sentencias de inserción, borrado y actualización de datos. Al final del artículo tendremos una clase que encapsulará todos los procedimientos necesarios para trabajar con la base de datos.