Gracias a este tema del foro de java, he descubierto la clase Desktop de Java 6. Esta clase permite abrir e imprimir ficheros con la aplicación por defecto que indique el sistema operativo. También permite lanzar el navegador por defecto con una URI determinada o el cliente de correo.
Un código tan tonto como este
Desktop.getDesktop().open(new File("c:/pingucd/readme.txt"));
en windows abrirá el notepad con el fichero readme.txt.
Interesante y simplifica bastante algunas cosas.
Bueno, pero no es nada que no puedas hacer bajo Windows con un simple:
Runtime.getRuntime().exec( command )
siendo command un String[] { «cmd», «/C», rutafichero };
En versiones anteriores (Win9x) servía un «start» como comando. A Mac le gusta más un «open», y siempre nos quedará usar una URL con el protocolo «file://».
Ciao.
Hola:
La gracia de desktop es que no tienes que abrir tú la aplicación, sino que indicas el fichero de datos y se abre con la aplicación adecuada. Como se menciona en el tema del foro, para abrir un pdf necesitarías saber exactamente la ruta de instalación y nombre del ejecutable de acrobat reader para poder abrirlo. De esta forma, símplemente indicas el fichero pdf y se abre con el acrobat reader o con la aplicación que tengas definida para abrir pdfs. Además, el código es compatible en cualquier sistema operativo, mientras que exec(«cmd»… sólo funciona en windows.
Se bueno.
En efecto la clase desktop te hace ser independiente de la plataforma (lo malo es que te exige un jre 1.6), pero ambas abren el fichero indicado con la aplicación que el sistema tenga definida por defecto.
Ciao.
Vaya, no sabía eso. Resulta que abres una ventana de ms-dos, pones el nombre de un fichero de datos y se abre solo
c:\>fichero.pdf
y sale el acrobat…. En cuanto llegue a casa voy a probar en linux a ver….
Se bueno.
Hola,
Una pregunta sobre esos ejemplos que dan, aunque la clase Desktop puede servir para cualquier plataforma el path lo restrige a sólo una ya que por ejemplo «C:/…» no sirve para linux. ¿Cómo puedo hacer para que el path funcione para todos los sistemas operativos? Lo que hice fue meter esos archivos en el class path y ponbiendo en el path «Pack/test.txt» pero no funciona =(
Puedes poner el path con /path/fichero.txt. Eso vale para linux y en windows lo buscaría en la unidad en la que estés ejecutando el programa. En cualquier caso, abrir un fichero con un path absoluto no suele ser muy portable. O bien se pide al operador qué fichero desea abrir, o bien es un fichero que va distribuido con nuestra aplicación, por lo que el path debería ser relativo.
Se bueno.
Hace tiempo lei sobre esta clase y me parece muy muy buena. No te tienes que preocupar por que tenga el programa adecuado ni nada de nada. Si no tiene el office pues el notepad y así de simple. Sobre lo del path, con mostrar un simple JFileChoose listo. Ademas normalmente el mismo fichero no esta en el mismo path en dos operativos difentes, y si lo esta es por que el path es relativo.
Saludos 😉
Hola, como soy relativamente nuevo en esto, ¿sería posible colocaran un código de ejemplo además de la línea de código expuesta aquí?
Hola amigos lo del tema del path relativo que decia MIKE en los comentarios anteriores lo solucione asi:
poner el archivo a abrir el el directorio donde se encuentra el proyecto
por ejemplo mi caso E:\Apus\Eclipse\Grafo
colocamos aqui el archivo y luego el codigo sera simplemente:
try {
File path = new File («archivo.pdf»);
Desktop.getDesktop().open(path);
}catch (IOException ex) {
ex.printStackTrace();
}
donde arhivo.pdf es el documento que copiamos en el directorio del proyecto y el que deseamos abrir.
saludos…espero que les sirva.
Saludos,
Realice la prueba en netbeans para windows y linux y funciona a la perfección, pero… al ejecutar el .jar no puede abrir el archivo .pdf.
Que puede ser…?
TEngo instalado la distribución Canaima 2.0 de linux y con respecto a Windows lo prove tanto en xp como en Windows vista…
Saludos a todos…
bpalencia, tengo el mismo problema que tu, cuando ejecuto la aplicación desde el IDE (Netbeans) funciona bien pero al ejecutar el jar, NO.
Aun no probe pero creo que debes tener instalado Java 6 y JRE 1.6, en el equipo donde vallas a ejecutar el jar.
Creo que asi deberia funcionar, Alguien ya soluciono esto?
Probablemente pille tarde a cualquiera, pero a mí me suele petar de una forma similar a la que contais porque creo que dentro del IDE (Netbeans o Eclipse) le dan igual las mayúsculas y minúsculas (En mi caso, llamaba a un archivo .png que en la carpeta acababa en .PNG), sin dar ningún problema, pero ya al exportar a Jar petaba porque le pasaban a importar. Desde windows incluso, que se supone que le importan poco esas cosas. Cosa de la máquina virtual de java supongo. Espero que nadie se ralle mucho tiempo con lo mismo como me pasó a mí xD
Hola @Andi
Es a windows al que no le importan mayúsculas/minúsculas en el nombre de fichero. Cuando estás con el IDE, el fichero está en el disco duro de una forma normal, como cualquier otro fichero, y es windows el que lo abre para el IDE, y a windows le da igual mayúsculas que minúsculas. Cuando creas el jar, si el fichero está dentro del jar, entonces ya no es windows el que lo abre, sino el propio class loader de java. Al class loader sí le importan mayúsculas y minúsculas en los nombres de fichero, por lo que hay que hacerlo bien.
Se bueno.
Estoy intentando abrir un fichero pdf desde java. EL código que tengo lo hace correctamente en local con eclipse pero cuando hacemos el war para subirlo a la maquina de desarrollo no habre el fichero y nos da el siguiente error java.awt.HeadlessException at java.awt.Desktop.getDesktop(Desktop.java:142).ya no se me ocurre que hacer para que funcione en desarrollo.. es un codigo tonto como bien dice el post