Cómo abrir un archivo con el programa asociado predeterminado

86

¿Cómo abro un archivo con el programa asociado predeterminado en Java? (por ejemplo, un archivo de película)

Frederic Morin
fuente
Si está utilizando, JavaFXvaya aquí o aquí .
Sedrick

Respuestas:

136

Puede utilizar Desktop.getDesktop().open(File file). Consulte la siguiente pregunta para conocer otras opciones: " [Java] ¿Cómo abrir el editor preferido del sistema de usuario para un archivo dado? "

Zach Scrivena
fuente
1
Sigo recibiendo esta excepción cuando intento con un archivo de película pero funciona con un archivo de imagen (bmp): java.io.IOException: No se pudo abrir el archivo: / D: /vidz/2006-04-02.wmv. Mensaje de error: el parámetro es incorrecto.
Frederic Morin
¿Puede proporcionar su código en la pregunta? Además, ¿qué sistema operativo y versión de Java estás usando?
Zach Scrivena
lo que no entiendo es que funciona con imágenes ... de todos modos estoy usando Java 1.6.0.06 y aquí está el código: File file = new File (MoviePlay.getInstance (). getBasePath (), movieFile.getPath () ); intente {Desktop.getDesktop (). abrir (archivo); } catch (ex) {...}
Frederic Morin
5
Sé que ha pasado mucho tiempo pero ... el problema era mi máquina. La asignación de programa predeterminada en mi Windows XP no está bien y tengo problemas con otros programas. ¡Probé con otras máquinas desde entonces y este método funciona bien! Aceptado!
Frederic Morin
7
Agregando a esta vieja respuesta; .edit()también se puede utilizar si el propósito de la apertura es editar. Algunos sistemas tienen diferentes aplicaciones predeterminadas para ver y editar; .open()abrirá el visor.
Jason C
0

SwingHacks tiene una solución para versiones anteriores de Java.

Creo que usaron el objeto Runtime para ejecutar el comando 'inicio' en Windows y hay un comando similar en Mac.

l_39217_l
fuente
-8

Aqui tienes:

File myFile = new File("your any type of file url");
FileOpen.openFile(mContext, myFile);

Crea una clase diferente dentro del paquete:

// 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);
    }
}
Vaibhav Joshi
fuente
o puede cambiar la condición if como esta
Vaibhav Joshi
if (url.getPath (). endsWith (". jpg") || url.getPath (). endsWith (". jpeg") || url.getPath (). endsWith (". png")) {intent.setDataAndType (uri, "imagen / *"); }
Vaibhav Joshi
1
Esto solo funciona en Android. No es una solución para todas las plataformas.
andred
1
Siendo un desarrollador de Android, pensé que sería útil para al menos los desarrolladores de Android
Vaibhav Joshi