Abra un archivo de texto en el editor de texto predeterminado … a través de Java?

DE ACUERDO. Pregunta simple. Tal vez no sea tan simple respuesta, sin embargo:

Tengo un archivo que descargué en Java, y sé que es un archivo de texto. ¿Hay alguna forma de que pueda usar Java para abrir ese archivo de texto en lo que sea que sea el editor de texto predeterminado? Tiene que funcionar para todos los sistemas operativos, de lo contrario, solo lo abriría con el Bloc de notas.

: \ Supongo que si no hay forma de hacerlo, podría usar JOptionPane y mostrar el contenido del archivo de texto …

Puedes hacer eso con:

java.awt.Desktop.getDesktop().edit(file); 

Esto enlaza con el artículo tutorial en java.awt.Desktop :

Java ™ Standard Edition versión 6 reduce la brecha entre el rendimiento y la integración de aplicaciones nativas y aplicaciones Java. Junto con la nueva funcionalidad de la bandeja del sistema, el soporte de la pantalla de bienvenida y la impresión mejorada para JTables, Java SE versión 6 proporciona la API de Desktop (java.awt.Desktop), que permite que las aplicaciones Java interactúen con aplicaciones predeterminadas asociadas con tipos de archivos específicos en la plataforma de host.

Es multiplataforma, pero puede no ser compatible en todas partes. Hay un método al que puede llamar para verificar si Desktop API está disponible, llamado isDesktopSupported (consulte el enlace para obtener más información). Estaba usando esta API el otro día para abrir archivos PDF en un cliente Swing.

Lamentablemente, existe un error conocido que afecta a algunas plataformas de Windows (XP y 2003) que bloqueará la JVM. Escribir una vez, depurar en todas partes , como de costumbre. De todos modos, para Windows hay una buena solución que todavía utiliza la aplicación preferida del usuario:

 if (System.getProperty("os.name").toLowerCase().contains("windows")) { String cmd = "rundll32 url.dll,FileProtocolHandler " + file.getCanonicalPath(); Runtime.getRuntime().exec(cmd); } else { Desktop.getDesktop().edit(file); } 
 Desktop.getDesktop().edit(File f); 

Ciertamente, puede configurarlo en el editor de texto y usar Runtime.exec para iniciarlo. Pero no puedo pensar en ninguna forma de determinar el editor predeterminado, especialmente de una manera independiente del sistema.

Tal vez su mejor opción es identificar en cuál de las plataformas más populares se encuentra y luego encontrar la manera de iniciar el editor predeterminado en esa plataforma. Por ejemplo, en Window obtendrá el editor predeterminado si lo hace “start filename.txt”, y estoy bastante seguro de que hay un equivalente de Linux.