How do I open a file with the default associated program in Java? (for example a movie file)
Asked
Active
Viewed 7.2k times
97
-
1If you are using `JavaFX` go [here](https://stackoverflow.com/questions/50774910/gethostservices-showdocument-in-a-fxml-file/50775157#50775157) or [here](https://stackoverflow.com/questions/33094981/javafx-8-open-a-link-in-a-browser-without-reference-to-application). – SedJ601 Oct 19 '18 at 14:34
4 Answers
161
You can use Desktop.getDesktop().open(File file)
. See the following question for other options: "[Java] How to open user system preffered editor for given file?"

Community
- 1
- 1

Zach Scrivena
- 29,073
- 11
- 63
- 73
-
1I keep getting this exception when trying with a movie file but it work with an image file (bmp): java.io.IOException: Failed to open file:/D:/vidz/2006-04-02.wmv. Error message: The parameter is incorrect. – Frederic Morin Feb 15 '09 at 19:30
-
Can you provide your code in the question? Also, which OS and Java version are you using? – Zach Scrivena Feb 15 '09 at 19:36
-
what I don't understand is that it work with images... anyway I'm using Java 1.6.0.06 and here's the code: File file = new File(MoviePlay.getInstance().getBasePath(), movieFile.getPath()); try { Desktop.getDesktop().open(file); } catch(ex) { ... } – Frederic Morin Feb 17 '09 at 02:03
-
-
@Blade: Could you try file.getCanonicalFile() to see if there's a difference? – Zach Scrivena Feb 17 '09 at 03:13
-
I get this message instead: java.io.IOException: Failed to open file:/D:/vidz/2006-04-02.wmv. Error message: The parameter is incorrect. – Frederic Morin Feb 24 '09 at 20:29
-
5I know it's been a long time but... the problem was my machine. The default program assiciation in my Windows XP are not ok and I'm having issue in other programs. I tried with other machines since then and this method work just fine ! Accepted ! – Frederic Morin Apr 04 '09 at 01:33
-
7Adding to this old answer; `.edit()` can also be used if the purpose of opening is for editing. Some systems have different default applications for viewing and editing; `.open()` will open the viewer. – Jason C Mar 17 '14 at 02:50
2
few examples to open files with default program
Example 1 : Runtime.getRuntime().exec("rundll32.exe shell32.dll ShellExec_RunDLL " + fileName);
Example 2 : Runtime.getRuntime().exec("rundll32.exe url.dll FileProtocolHandler " + fileName);
Example 3 : Desktop.getDesktop().open(fileName);
alternative...
Runtime.getRuntime().exec(fileName.toString());
Runtime.getRuntime().exec("cmd.exe /c Start " + fileName);
Runtime.getRuntime().exec("powershell.exe /c Start " + fileName);
Runtime.getRuntime().exec("explorer.exe " + fileName);
Runtime.getRuntime().exec("rundll32.exe SHELL32.DLL,OpenAs_RunDLL " + fileName);
Or....
public static void openFile(int selecType, File fileName) throws Exception {
String[] commandText = null;
if (!fileName.exists()) {
JOptionPane.showMessageDialog(null, "File not found", "Error", 1);
} else {
switch (selecType) {
case 0:
//Default function
break;
case 1:
commandText = new String[]{"rundll32.exe", "shell32.dll", "ShellExec_RunDLL", fileName.getAbsolutePath()};
break;
case 2:
commandText = new String[]{"rundll32.exe", "url.dll", "FileProtocolHandler", fileName.getAbsolutePath()};
break;
case 3:
commandText = new String[]{fileName.toString()};
break;
case 4:
commandText = new String[]{"cmd.exe", "/c", "Start", fileName.getAbsolutePath()};
break;
case 5:
commandText = new String[]{"powershell.exe", "/c", "Start", fileName.getAbsolutePath()};
break;
case 6:
commandText = new String[]{"explorer.exe", fileName.getAbsolutePath()};
break;
case 7:
commandText = new String[]{"rundll32.exe", "shell32.dll", "OpenAs_RunDLL", fileName.getAbsolutePath()}; //File open With
break;
}
if (selecType == 0) {
Desktop.getDesktop().open(fileName);
} else if (selecType < 8) {
Process runFile = new ProcessBuilder(commandText).start();
runFile.waitFor();
} else {
String errorText = "\nChoose a number from 1 to 7\n\nExample : openFile(1,\"" + fileName + "\")\n\n";
System.err.println(errorText);
JOptionPane.showMessageDialog(null, errorText, "Error", 1);
}
}
}

Hakan ÇELİK
- 41
- 2
0
SwingHacks has a solution for older versions of Java.
I think they used the Runtime object to execute the 'start' command on windows and there is a similar command on the mac.

l_39217_l
- 2,090
- 1
- 13
- 15
-9
Here you go:
File myFile = new File("your any type of file url");
FileOpen.openFile(mContext, myFile);
Create a different class within the package:
// code to open default application present in the handset
public class FileOpen {
public static void openFile(Context context, File url) throws IOException {
// Create URI
File file=url;
Uri uri = Uri.fromFile(file);
Intent intent = new Intent(Intent.ACTION_VIEW);
// Check what kind of file you are trying to open, by comparing the url with extensions.
// When the if condition is matched, plugin sets the correct intent (mime) type,
// so Android knew what application to use to open the file
if (url.toString().contains(".doc") || url.toString().contains(".docx")) {
// Word document
intent.setDataAndType(uri, "application/msword");
} else if(url.toString().contains(".pdf")) {
// PDF file
intent.setDataAndType(uri, "application/pdf");
} else if(url.toString().contains(".ppt") || url.toString().contains(".pptx")) {
// Powerpoint file
intent.setDataAndType(uri, "application/vnd.ms-powerpoint");
} else if(url.toString().contains(".xls") || url.toString().contains(".xlsx")) {
// Excel file
intent.setDataAndType(uri, "application/vnd.ms-excel");
} else if(url.toString().contains(".zip") || url.toString().contains(".rar")) {
// WAV audio file
intent.setDataAndType(uri, "application/x-wav");
} else if(url.toString().contains(".rtf")) {
// RTF file
intent.setDataAndType(uri, "application/rtf");
} else if(url.toString().contains(".wav") || url.toString().contains(".mp3")) {
// WAV audio file
intent.setDataAndType(uri, "audio/x-wav");
} else if(url.toString().contains(".gif")) {
// GIF file
intent.setDataAndType(uri, "image/gif");
} else if(url.toString().contains(".jpg") || url.toString().contains(".jpeg") || url.toString().contains(".png")) {
// JPG file
intent.setDataAndType(uri, "image/jpeg");
} else if(url.toString().contains(".txt")) {
// Text file
intent.setDataAndType(uri, "text/plain");
} else if(url.toString().contains(".3gp") || url.toString().contains(".mpg") || url.toString().contains(".mpeg") || url.toString().contains(".mpe") || url.toString().contains(".mp4") || url.toString().contains(".avi")) {
// Video files
intent.setDataAndType(uri, "video/*");
} else {
//if you want you can also define the intent type for any other file
//additionally use else clause below, to manage other unknown extensions
//in this case, Android will show all applications installed on the device
//so you can choose which application to use
intent.setDataAndType(uri, "*/*");
}
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
}

Eli Sadoff
- 7,173
- 6
- 33
- 61

Vaibhav Joshi
- 145
- 1
- 5
-
-
if(url.getPath().endsWith(".jpg") || url.getPath().endsWith(".jpeg")|| url.getPath().endsWith(".png")) { intent.setDataAndType(uri,"image/*"); } – Vaibhav Joshi Nov 03 '16 at 09:59
-
2
-
1being an android developer i thought it would be helpful to atleast android developers – Vaibhav Joshi Dec 30 '16 at 06:45