Open a text file in the default text editor... via Java?

21,901

Solution 1

You can do that with:

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

This links to the tutorial article on java.awt.Desktop:

Java™ Standard Edition version 6 narrows the gap between performance and integration of native applications and Java applications. Along with the new system tray functionality, splash screen support, and enhanced printing for JTables , Java SE version 6 provides the Desktop API (java.awt.Desktop) API, which allows Java applications to interact with default applications associated with specific file types on the host platform.

It is cross-platform, but may not be supported everywhere. There is a method you can call to check whether the Desktop API is available, called isDesktopSupported (see the link for more explanation). I was using this API the other day to open PDFs in a Swing client.

Unfortunately there is a known bug affecting some Windows platforms (XP and 2003) that will crash the JVM. Write once, debug everywhere, as usual. Anyway, for Windows there is a nice workaround which still uses the user's preferred application:

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);
}

Solution 2

Desktop.getDesktop().edit(File f);
Share:
21,901

Related videos on Youtube

Petros Koutsolampros
Author by

Petros Koutsolampros

Architect from National Technical University of Athens, with a Masters degree in Adaptive Architecture and Computation from the Bartlett, University College London

Updated on April 27, 2020

Comments

  • Petros Koutsolampros
    Petros Koutsolampros about 4 years

    OK. Simple question. Maybe not so simple answer, though:

    I have a file I downloaded in Java, and I know that it's a text file. Is there any way that I can use Java to open that text file in whatever the default text editor is? It has to work for all OS's, otherwise I would just make it open with Notepad.

    :\ I guess that if there's no way to do this I could use JOptionPane and show the contents of the text file...

  • Admin
    Admin almost 13 years
    OK Cool-- that's cross-platform and handles everything? :)
  • Hot Licks
    Hot Licks almost 13 years
    Ah, wasn't aware of Desktop -- my Java pretty much stops with 5.
  • Andrew Thompson
    Andrew Thompson almost 13 years
    Don't forget there is also Desktop.open(File) (sometimes opens read-only) & Desktop.print(File) for slightly different actions.
  • Andrew Thompson
    Andrew Thompson almost 13 years
    That bug report states.. "Only with Windows 2003 , works fine with winXP." (emphasis mine) If Win. 2003 is all it crashes on, I won't be losing sleep over it. Specify XP as the minimum and lose a few clients - no stress.
  • Nathan Hughes
    Nathan Hughes almost 13 years
    @Andrew: Yeah, it says that. But my boss' boss was running my program, on XP, and it crashed for him. So I was stressed.
  • John
    John over 12 years
    Only problem here: When you have someserver/somedir/myReport.doc then http takes priority over .doc and instead of Word/OpenOffice the browser opens. This is a Windows limitation.
  • Nathan Hughes
    Nathan Hughes over 12 years
    @stwissel: would it help to map a drive letter on the client to the webdav server, then use the drive letter instead of http?
  • Murmel
    Murmel over 7 years
    does not work on Ubuntu 14.04 - but Desktop.open(File) does, thanks to @AndrewThompson
  • Noor ul Ain
    Noor ul Ain over 2 years
    Desktop.getDesktop().edit( ) / open( ) work only if a default editor is already associated with that extension. Else it crashes (i ran it on win 10) saying that "No application is associated with the specified file..." Isn't there a way to just open the default text editor (whatever) of the current OS?