Open a text file in the default text editor... via Java?
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);
Related videos on Youtube
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, 2020Comments
-
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 almost 13 yearsOK Cool-- that's cross-platform and handles everything? :)
-
Hot Licks almost 13 yearsAh, wasn't aware of Desktop -- my Java pretty much stops with 5.
-
Andrew Thompson almost 13 yearsDon't forget there is also
Desktop.open(File)
(sometimes opens read-only) &Desktop.print(File)
for slightly different actions. -
Andrew Thompson almost 13 yearsThat 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 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 over 12 yearsOnly 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 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 over 7 yearsdoes not work on Ubuntu 14.04 - but Desktop.open(File) does, thanks to @AndrewThompson
-
Noor ul Ain over 2 yearsDesktop.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?